آفلاین
user-avatar

آپلود فایل از دو input متفاوت در لاراول

2 سال پیش
توسط حسام موسوی آپدیت شد
آفلاین
user-avatar
رضا ( 505 تجربه )
2 سال پیش
تخصص : Laravel Developer

سلام خدمت دوستان
من یک فرم دارم که میخوام از دوتا input متفاوت دو فایل (تصویر) مختلف اپلود کنم و در یک جدول دیتابیس ذخیره کنم.
فرض کنید در جدول categories من دو تا ستون به اسم category_image و category_bg دارم.دسته بندیم ایجاد و ویرایش نمیشه؟

AdminController :

<?php

namespace AppHttpControllersAdmin;

use CarbonCarbon;
use IlluminateHttpRequest;
use AppHttpControllersController;

class AdminController extends Controller
{
    protected function uploadImages($file)
    {
        $year = Carbon::now()->year;
        $filename = date('Y_m_d') . '_' . $file->getClientOriginalName();
       $destination = "/uploads/images/{$year}/categories";
        $destinationPath = public_path($destination);
        $file->move($destinationPath , $filename);
        return $destination . '/'. $filename;

    }

}

CategoryController :

<?php

namespace AppHttpControllersAdmin;

use AppCategory;
use AppHttpRequestsCategoryRequest;
use IlluminateHttpRequest;
use AppHttpControllersController;

class CategoryController extends AdminController
{
    /**
     * Display a listing of the resource.
     *
     * @return IlluminateHttpResponse
     */
    public function index()
    {
        $categories = Category::latest()->paginate(20);
        return view('admin.categories.all' , compact('categories'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return IlluminateHttpResponse
     */
    public function create()
    {
        return view('admin.categories.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param CategoryRequest|Request $request
     * @return IlluminateHttpResponse
     */
    public function store(CategoryRequest $request)
    {
        $imageUrl =  $this->uploadImage($request->file(['category_image' , 'category_bg']));
        Category::create(array_merge($request->all() , ['category_image' => $imageUrl , 'category_bg ' => $imageUrl]));

    return redirect(route('categories.index'));

    }

    /**
     * Update the specified resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  AppCategory  $category
     * @return IlluminateHttpResponse
     */
    public function update(Request $request, Category $category)
    {
       $imageUrl = $request->file(['category_image' , 'category_bg']);
        $input = $request->all();
        if ($imageUrl){
            $input ['category_image'] = $this->uploadImage($request->file('category_image'));
            $input ['category_bg'] = $this->uploadImage($request->file('category_bg'));
        }else{
            $input ['category_image'] = $category->category_image;
            $input ['category_bg'] = $category->category_bg;
        }

        $category->update($input);
        return redirect(route('categories.index'));
    }

}

ارور :Call to a member function getClientOriginalName() on null

آفلاین
user-avatar
developer ( 33462 تجربه )
2 سال پیش
تخصص : برنامه نویس

توی فرم enctype="multipart/form-data" گذاشتید؟

آفلاین
user-avatar
رضا ( 505 تجربه )
2 سال پیش
تخصص : Laravel Developer

@alirezasafdari
سلام بله هم در create.blade.php و هم در edit.blade.php ایکریپت هست
البته الان تونستم store شو بنویسم اما update شو گیر کردم!!! مشکلم بیشتر کنترلر هست
CategoryController :

    /**
     * Store a newly created resource in storage.
     *
     * @param CategoryRequest|Request $request
     * @return IlluminateHttpResponse
     */
    public function store(CategoryRequest $request)
    {
        $imageUrl['category_image'] =  $this->uploadImage($request->file('category_image'));
        $imageUrl['category_bg'] =  $this->uploadImage($request->file('category_bg'));
        Category::create(array_merge($request->all() , ['category_image' => $imageUrl['category_image'] , 'category_bg ' => $imageUrl['category_bg']]));

        return redirect(route('categories.index'));

    }
آفلاین
user-avatar
حسام موسوی ( 382469 تجربه )
2 سال پیش
تخصص : طراح و برنامه نویس

در اپدیت هم دقیقا مثل store فایل ها رو میگیرید و تک تک آپلود میکنید مشکل در چیه
بجای چک کردن imageUrl چک کنید اگر فایلی ارسال شده بود آپلود انجام بشه اگر نشده بود مقدار های قبلی قرار ب گیره
دقیقا update شما میشه شبیه کدی که در جواب قبل این جواب وارد کردید

آفلاین
user-avatar
رضا ( 505 تجربه )
2 سال پیش
تخصص : Laravel Developer

@hesammousavi
میشه بگید کدوم کد در جواب قبل؟
من الان اپدیتمو اینجوری نوشتم ولی کار نمیکنه!!منظورتون اینجوریه؟

    /**
     * Update the specified resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  AppCategory  $category
     * @return IlluminateHttpResponse
     */
    public function update(Request $request, Category $category)
    {
        $imageUrl['category_image'] =  $this->uploadImage($request->file('category_image'));
        $imageUrl['category_bg'] =  $this->uploadImage($request->file('category_bg'));
        $input = $request->all();

         if ($request->hasFile($imageUrl['category_image'])){
            $input ['category_image'] = $this->uploadImage($request->file('category_image'));
        }else{
            $input ['category_image'] = $category->category_image;
        }
        if($request->hasFile($imageUrl['category_bg'])){
            $input ['category_bg'] = $this->uploadImage($request->file('category_bg'));
        }else{
            $input ['category_bg'] = $category->category_bg;
        }

        $category->update($input);
        return redirect(route('categories.index'));
    }
آفلاین
user-avatar
حسام موسوی ( 382469 تجربه )
2 سال پیش
تخصص : طراح و برنامه نویس

قسمت اول یعنی

$imageUrl['category_image'] =  $this->uploadImage($request->file('category_image'));
        $imageUrl['category_bg'] =  $this->uploadImage($request->file('category_bg'));
        $input = $request->all();

نیاز نیست
و بقیه باید کار کنه
قبل اینکه آپدیت کنید با dd تست بگیرید ببینید چه مقادیری برگشت پیدا میکنه

برای ارسال پاسخ باید وارد سایت شوید