۶ میلیون تومان تخفیف ویژه🎁 برای پخته‌ترین و کاربردی‌ترین متود آموزشی سون لرن😍 کلیک کن👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۵ Mehrjoo
نحوه استفاده از ست
جامعه لاراول ایجاد شده در ۰۷ آذر ۱۴۰۳

با سلام متوجه مفهوم اکسسور شدم

سوالم توی دنیای واقعی هست .

من یه پروژه دارم که توش میام عکس رو به سایزی که دوست دارم تغییر میدم و توی پوشه مربوطه ذخیره میکنم . در حال حاضر دارم توی کنترلر اینکار رو انجام میدم و این باعث شده کنترلر مثلا برند من توی تابع افزودن برندش علاوه بر کار افزودن تغییر سایز عکس هم انجام بده .

با اکسسور ست چطور میتونم این فرایند رو توی مدل انجام بدم . اصلا این درسته ؟ یا باید بیام توی اعتبار سنجی ریکوئستم انجام بدم ؟ در هر دو صورت لطفا بهم کمک کنید که چطور این کار انجام بشه ؟؟؟


        $image_1 = $this->file('image');
        $image = Image::read($image_1);
        $name_gen = hexdec(uniqid()) . '.' . $image_1->getClientOriginalExtension(); // 323232356.jpg
        $image->resize(300, 300)->save('upload/brand/' . $name_gen);
        $save_url = 'upload/brand/' . $name_gen;

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

سلام. وقت بخیر 

برای تغییر سایز عکستون میتونید این عملیات رو منتقلش کنید به یک سرویس ImageService، و بعد از این سرویس داخل کنترل خودتون استفاده کنید. 

مصطفی زارعی ۰۸ آذر ۱۴۰۳، ۱۷:۱۹

Model mutator‌ها مکان درستی برای این عملیات نیست، چون کاربردشون برای انجام تغییرات روی داده قبل ذخیره در database هست. و اینجا شما میخواید تغییرات روی عکس خودتون بدید که یک وظیفه جداس و مربوط به مدل شما نمیشه.

مصطفی زارعی ۰۸ آذر ۱۴۰۳، ۱۷:۲۲

خب میتونم توی اعتبار سنجی ریکوئست اینکار رو بکنم ؟؟؟

Mehrjoo ۰۸ آذر ۱۴۰۳، ۱۹:۰۵

نظر شما اینه که من یه فایل سرویس درست کنم و کلا کارای تصویرم رو توی این سرویس بزارم . و بعد ازش استفاده کنم .

خب حالا این سرویس رو توی چه پوشه ای قرار بدم .

Mehrjoo ۰۸ آذر ۱۴۰۳، ۱۹:۰۷

سلام. در داخل اعتبارسنجی شما validate می‌کنید داده ای که آمده درست باشه، مثلا اینجا برای عکس فرمت و سایزش معتبر باشه، مواردی که مربوط به اعتبارسنجی داده میشه رو چک می‌کنید و انجام عملیات تغییر سایز تصویر در این قسمت درست نیست. 

می تونید یه پوشه services درست کنید و داخل اون قرار بدید. یا با دستور زیر: 

php artisan make:service ImageProcessingService

و یک متد resize تعریف کنید و عملیات مدنظر رو اونجا انجام بدید:

namespace App\Services;
use Intervention\Image\Facades\Image;
class ImageProcessingService
{
    public function resizeImage($image, $width = 300, $height = 300)
    {
        return Image::make($image)->resize($width, $height);
    }
}

 و در آخر در کنترلر خودتون inject و استفادش کنید.

 

مصطفی زارعی ۰۹ آذر ۱۴۰۳، ۱۵:۰۳