url);         $request->merge([             'url' ...' /> url);         $request->merge([             'url' ...' />
🔥 ۴۰ درصد تخفیف ثبت‌نام دوره‌ها قبل از افزایش قیمت‌ها
۰ ثانیه
۰ دقیقه
۰ ساعت
۱۹ جمال توفیقی
خطا در ذخیره اطلاعات
جامعه لاراول ایجاد شده در ۳۰ آذر ۱۴۰۱

سلام

    public function store(Request $request)
    {
        $path = Storage::putFile('contracts', $request->url);
        $request->merge([
            'url' => $path
        ]);
        $request->user()->videos()->create($request->all());
        return redirect()->route('index')->with('success', __('message.store'));
    }

آدرسی ک در دیتابیس ذخیره میشه به شکل زیر

C:\\xampp\\tmp\\php4632.tmp

C:\\xampp\\tmp\\phpAE75.tmp

C:\\xampp\\tmp\\php5813.tmp

کجای کارم اشتباهه؟

     public function store(Request $request)
    {
        $path = Storage::putFile('contracts', $request->url);
        $url = Storage::url($path);
        $request->merge(['url' => $url]);
        $request->user()->videos()->create($request->all());
        return redirect()->route('index')->with('success', __('message.store'));
    }

url هم ک میدیم ادرس به شکل قبلی ذخیره میشه

C:\\xampp\\tmp\\php1545.tmp

جمال توفیقی ۳۰ آذر ۱۴۰۱، ۱۷:۵۱

سلام مهدی عزیز

برای آپلود باید متد file رو هم ثدا بزنید.

$path = Storage::putFile('avatars', $request->file('avatar'));

از requestو کلید url یه دامپ بگیر ببین مقادیر به درستی ارسال میشه.

خانم پرمیدا نوبختی ۳۰ آذر ۱۴۰۱، ۱۸:۰۷

احمد جان تا قبلا از ذخیره در دیتابیس ادرس هیچ مشکلی نداره خروجی دوتا هم یکیه

$path = Storage::putFile('contracts', $request->url);
$path = Storage::putFile('contracts', $request->file('url'));

ولی هنگام merge ادرس خراب میشه

$path = Storage::putFile('contracts', $request->url);
        $o = $request->merge(['url' => $path]);
        dd($o);

خروجی dd

  #session: Illuminate\\Session\\Store {#403 ▼
    #id: "EHUWi9XQtBMpk78JRvddztAZMNxpYfZXpBvW8C22"
    #name: "laravel_session"
    #attributes: array:4 [▼
      "_token" => "A6nePG9MQ1Dii1IGF6tXgzFp33pAxi5ej0DTp38n"
      "_flash" => array:2 [▶]
      "_previous" => array:1 [▶]
      "login_web_59ba36addc2b2f9401580f014c7f58ea4e30989d" => 1
    ]
    #handler: Illuminate\\Session\\FileSessionHandler {#397 ▼
      #files: Illuminate\\Filesystem\\Filesystem {#163}
      #path: "C:\\Users\\LENOVO\\Desktop\\WorkShop\\video-share2\\storage\\framework/sessions"
      #minutes: "120"
    }
    #serialization: "php"
    #started: true
  }
جمال توفیقی ۳۰ آذر ۱۴۰۱، ۱۸:۳۶

مهدی جان

چرا merge انجام میدی؟!

اینطوری کن:

$request->url=$path;
خانم پرمیدا نوبختی ۳۰ آذر ۱۴۰۱، ۱۹:۲۸

احمد جان فاییده ای نکرد در این حالت هم ادرس درست ذخیره نمیشه


جمال توفیقی ۳۰ آذر ۱۴۰۱، ۱۹:۳۵

احمدجان الان دیدن ادامه دوره با این مشکل امکان پذیر نیس ....

جمال توفیقی ۰۱ دی ۱۴۰۱، ۰۵:۴۴

مهدی عزیز

اول از request یه دامپ بگیر مقادیر ارسالی رو چک کن معتبر باشند.

dd($request->all());


name اینپوت مدنظر هم file هست.

خانم پرمیدا نوبختی ۰۱ دی ۱۴۰۱، ۰۷:۰۷

احمدجان مشکل از جایی دیگس

نام اینپوت من url و dd هم تا دلت بخواد گرفتم و مشکلی نبود ادرس به ما درست میده

مشکل وقتی پیش میاد ک در دیتابیس اطلاعات ذخیره میشه

روش‌های دیگه برای ذخیره path هست ولی من میخوام به روش استاد سامی برم

و این خطا و پاسخ‌های نادرست سرعتم گرفته

بنا دارم تا اخر ما دوره رو تموم کنم برای بازار کار ولی با این شرایط فکر نکنم حالا حالا بتونم دوره رو به اتمام برسونم

اقای گازری یا موحد یا کسی دیگه نیس برای پاسخگویی؟


جمال توفیقی ۰۱ دی ۱۴۰۱، ۰۷:۱۸

مهدی جان یکبار این مورد هم بررسی کن

به سایر منتورها هم اطلاع دادم جهت بررسی.

چون که url مرج نمیشه توی دیتابیس آدرس tmp ذخیره میشه.

مشکل توی مرج کردن url هست.

$path = Storage::putFile('contracts', $request->file('url'));
$request->url=$path;
dd($request->all());


خانم پرمیدا نوبختی ۰۱ دی ۱۴۰۱، ۰۷:۵۳

احمد جان merge ک طبق اموزش استاد استفاده کردم

$path = Storage::putFile('', $request->url);
$request->url=$path;
dd($request->all());

result

  "_token" => "QZ3FCPyjKbjGgSEawiu9YtPhCaPFCLGp8d7E6wHE"
  "name" => "mahdi"
  "length" => "500"
  "slug" => "لباس5hhhhhhhhhhhhhh"
  "thumbnail" => "https://www.eligasht.com/Blog/wp-content/uploads/2017/05/historical-takhte-jamshyd.jpg"
  "category_id" => "1"
  "description" => "hhhhhhhhhhhhhhhhhhhhh"
  "url" => Illuminate\\Http\\UploadedFile {#415 ▼
    -test: false
    -originalName: "آی تی (IT) یا فناوری اطلاعات چیست؟ 7 دلیل برای انتخاب رشته IT.mp4"
    -mimeType: "video/mp4"
    -error: 0
    #hashName: "eaCFBg6eTS9B4Yzrr9D9krzfAdtfedHmmRW7QYPn"
    path: "C:\\xampp\\tmp"
    filename: "php73B8.tmp"
    basename: "php73B8.tmp"
    pathname: "C:\\xampp\\tmp\\php73B8.tmp"
    extension: "tmp"
    realPath: "C:\\xampp\\tmp\\php73B8.tmp"
    aTime: 2022-12-22 04:34:22
    mTime: 2022-12-22 04:34:21
    cTime: 2022-12-22 04:34:21
    inode: 2251799814266926
    size: 18719582
    perms: 0100666
    owner: 0
    group: 0
    type: "file"
    writable: true
    readable: true
    executable: false
    file: true
    dir: false
    link: false
    linkTarget: "C:\\xampp\\tmp\\php73B8.tmp"
  }
]

قسمت ک در url ذخیره میشه

pathname: "C:\\xampp\\tmp\\php73B8.tmp"

اینه ک در دیتابیس ذخیره میشه

جمال توفیقی ۰۱ دی ۱۴۰۱، ۰۸:۰۷

مهدی عزیز

وقتی مقدار یکی از فیلدهای ریکوئست بصورت فایل باشه مرج کردن اون روی مقدارش توی request->all تاثیری نمیزاره

راه اول:

$request->user()->videos()->create($request->except('url') + ['url' => $path]);

راه دوم:

$request->user()->videos()->create(
    array_merge($request->except('url'), ['url' => $path])
);


زمانیکه بنده از شما دامپ و نتیجه رو میخوام به این دلیل هست که به سورس شما دسترسی ندارم و طبیعتا نمیتونم اجرای کد و نتیجه رو ببینم.

پس شما هم برای رفع مشکل باید همکاری رو انجام و مواردی که برای حل مشکل نیاز دارم رو در اختیارم قرار بدید.

البته شرمنده بدون دسترسی به سورس من دیر متوجه سورس شما و نتیجه مشکل شدم!

خانم پرمیدا نوبختی ۰۱ دی ۱۴۰۱، ۰۹:۱۰

سلام مجدد احمدجان

خدا رو شکر ک به نتیجه رسیدیم

حالا داستان چیه که برا استاد با request->all مشکلی پیش نمیاد الله اعلم

موردی نیس اگر احیانا مجددا به مشکلی برخوردم سورس مو در اختیارتون قرار میدیم

در مورد تندی هم در وحله اول معذرت چون سطح توقعم از 7لرن خیلی بالاس و در ثانی شما هم ما رو درک کن من با دوره php شروع کردم و تایم زیادی ک دارم کار میکنم در خونه بدون هیچ منبع درامدی

و دوست ندارم بیکاریم به سال دیگه بکشه

جمال توفیقی ۰۱ دی ۱۴۰۱، ۰۹:۳۶

مهدی عزیز

عجله در دوره فایده نداره

باید سعی کنی مهارتت رو ارتقا بدی

هرچی سریعتر ویدیوهارو ببینی سریعتر از موارد مهم رد میشی و طبیعتا سریعتر از ذهنت خارج میشه و یادگیری بطور کامل انجام نمیشه.

بنظرم سعی کن تمرکزت بیشتر روی ارتقای مهارت باشه

با تمام کردن دوره زودتر از زمان مورد نیاز برای یادگیری ضرر میکنی.

استاد سامی اومدن path رو در url گذاشتن، در ویدیوی استاد داخل url فایلی آپلود نمیشه بلکه اسم فیلد file هست، بخاطر همین merge هم صورت میگیره

اما شما اومدی اینپوت url رو برای آپلود انتخاب کردی و دیگه url داخل request->all یک تکست نیست و یک فایل قرار گرفته.

خانم پرمیدا نوبختی ۰۱ دی ۱۴۰۱، ۰۹:۴۷

احمدجان این تیکه رو متوجه نشدم

استاد سامی اومدن path رو در url گذاشتن، در ویدیوی استاد داخل url فایلی آپلود نمیشه بلکه اسم فیلد file هست، بخاطر همین merge هم صورت میگیره

اما شما اومدی اینپوت url رو برای آپلود انتخاب کردی و دیگه url داخل request->all یک تکست نیست و یک فایل قرار گرفته.


استاد ی input با type=file ایجاد کردن با name=file

مشخصات اینپوت من هم دقیقا همین بوده منتهی با name=url

جمال توفیقی ۰۱ دی ۱۴۰۱، ۱۰:۰۳

استاد بعد از ارسال اینپوت اون رو آپلود و یک آدرس جایگزین کردند در request اما شما مستقیما فایل رو قرار دادی برای آپلود.

خانم پرمیدا نوبختی ۰۱ دی ۱۴۰۱، ۱۰:۰۸

مهندس منم همین کار رو کردم

شما وقتی به شکل زیر

$path = Storage::putFile('contracts', $request->url);

putFile میکنی بعد از اینکه فایل در stoage قرار گرفت ی مسیر بتون برمیگردونه که اون در دیتابیس قرار میدیم

جمال توفیقی ۰۱ دی ۱۴۰۱، ۱۰:۴۱

تفاوت در همینجاست که شما بجای name=file مقدار name رو برابر url قرار دادی

اگر name=file میذاشتی مقدار url رو میتونستی merge کنی و مشکلی نبود و اونجا اگر میخواستی file رو مقدار دیگری merge کنی به همین مشکل اینجا برمیخوردی

وقتی اینپوت فایل رو name=url میذاری مقدار url دیگه مقادیر آپلود فایل قرار میگیره که مرج نمیشه.

مسئله مقادیری هست که داخل request قرار میگیره. برای اینکه بیشتر متوجه تغییرات بشی name رو برابر یک مقدار دیگه قرار بده مثلا name=test بعد میتونی مثل همون راه استاد انجام بدی و merge هم صورت میگیره:

$path = Storage::putFile('contracts', $request->test);
$request->merge([
            'url' => $path
        ]);


بهترین پاسخ
خانم پرمیدا نوبختی ۰۱ دی ۱۴۰۱، ۱۰:۵۶

پس این رو باید بزاریم به حساب باگ لاراول

چون استاد گفتن هر اسمی برای اینپوت بزاری مشکلی نیس url رو گذاشتم

جمال توفیقی ۰۱ دی ۱۴۰۱، ۱۲:۴۷

همچین چیزی نمیشه گفت چون لاراول طبق اصول کلید کد هست.

فریمورک چارچوبی برای ما تعیین میکنه که ما ملزم به رعایت اون هستیم تا پروژه بهتر جلو بره.

خانم پرمیدا نوبختی ۰۱ دی ۱۴۰۱، ۱۳:۳۸