رضا
6 سال پیش توسط رضا مطرح شد
5 پاسخ

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

سلام خدمت دوستان
من یک فرم دارم که میخوام از دوتا 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


ثبت پرسش جدید
developer
تخصص : برنامه نویس
@developer 6 سال پیش آپدیت شد
0

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


رضا
تخصص : Laravel Developer
@Megairan 6 سال پیش مطرح شد
0

@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'));

    }

حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 6 سال پیش مطرح شد
0

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


رضا
تخصص : Laravel Developer
@Megairan 6 سال پیش آپدیت شد
0

@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'));
    }

حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 6 سال پیش مطرح شد
0

قسمت اول یعنی

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

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


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام