کار با وابستگی Image Intervention برای آپلود عکس در لاراول

کار با وابستگی Image Intervention برای آپلود عکس در لاراول

وابستگی Image Intervention از معروف ترین وابستگی برای آپلود عکس در لاراول است. همین طور که می ببینید که نسخه ۳ این وابستگی تغییرات کلی صورت گرفته است و با کدهای نسخه ۲ آن سازگار نیست و نیاز به تغییراتی دارد.

۱. در جدول users فیلد به نام image ایجاد کنید:

$table->string('image')->nullable();

۲. در فرم فیلد عکس ایجاد کنید:

<div class="col-12">
         <label for="input8" class="form-label">عکس کاربر</label>
         <input type="file" name="image" class="form-control rounded-5 @error('image') is-invalid @enderror" id="input8">
         @error('image')
                <span class="invalid-feedback" role="alert">
                       <strong>{{ $message }}</strong>
                </span>
         @enderror
</div>

۳. وابستگی Image Intervention را نصب کنید که نیازمند PHP 8.1 است.

composer require intervention/image

۴. در ویندوز xampp اکستنشن extension=imagick.so را فعال کنید و در لینوکس دستور زیر را برای نصب Imagick وارد کنید:

sudo apt install php-imagick
php -m | grep imagick
sudo systemctl restart apache2

۵. یک تابع saveImage در User.php ایجاد کنید:

use Intervention\Image\ImageManager;

public static function saveImage($file)
    {
        if ($file){
            $name = $file->hashName();

            $smallImage = ImageManager::imagick()->read($file->getRealPath());
            $bigImage = ImageManager::imagick()->read($file->getRealPath());
            $smallImage->resize(256, 256, function ($constraint){
                $constraint->aspectRatio();
            });

            Storage::disk('local')->put('users/small/'.$name, (string) $smallImage->encodeByMediaType('image/jpeg', 90));
            Storage::disk('local')->put('users/big/'.$name, (string) $bigImage->encodeByMediaType('image/jpeg', 90));

            return $name;

        }else{
            return "";
        }
    }

۶. کد زیر در UserController.php وارد کنید:

public function store(Request $request)
    {
        $image = User::saveImage($request->image);

        User::query()->create([
            'name' => $request->name,
            'email' => $request->email,
            'mobile' => $request->mobile,
            'password' => bcrypt($request->password),
            'image' => $image,
        ]);

        return to_route('users.index');
    }

۷. در قسمت config/filesystem.php کد زیر را وارد کنید:

'local' => 
[
   'driver' => 'local',
   'root' => public_path('images'),
   'throw' => false,
],

۸. برای نمایش عکس کاربر کد زیر را وارد کنید:

@foreach($users as $index=>$row)
<figure>
       <img src="{{asset('images/users/small/' .$row->image)}}" class="rounded-4" width="52px">
</figure>
@endforeach

موفق باشید 🙂

پیوند منابع
لاراول (Laravel) مارس/30/2024 1223
https://rayium.ir/?p=1387

دیدگاه شما