160
0
Image Intervention Laravel

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

3 دقیقه

وابستگی 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 951

دیدگاه شما