💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ پویا پارسایی
نحوه کال کردن addEncoderFactory در ServiceProviderهای لاراول؟
جامعه مهندسی نرم افزار ایجاد شده در ۱۹ فروردین ۱۴۰۲

سلام و عرض ادب

استاد در مورد اینکه میتونیم addEncoderFactory رو توی ServiceProviderهای لاراول صدا بزنیم توی این سوال توضیح دادن، میشه لطفا با کد یه مثال بزنید که چجوری مثلا توی AppServiceProvider لاراول این متد رو کال کنیم و encoder هامون رو بهش پاس بدیم؟

من provider جدید ساختم به این صورت:

<?php
namespace App\\Providers;
use Illuminate\\Support\\ServiceProvider;
use Src\\Solid\\Ocp\\EncoderFactory;
use Src\\Solid\\Ocp\\EncoderFactoryInterface;
class EncoderServiceProvider extends ServiceProvider
{
    public $bindings = [
        EncoderFactoryInterface::class => EncoderFactory::class,
    ];
    /**
     * Register services.
     */
    public function register(): void
    {
        //
    }
    /**
     * Bootstrap services.
     */
    public function boot(EncoderFactory $encoderFactory): void
    {
        $encoderFactory->addEncoderFactory('json',/*???*/);
    }
}

همونطوری که میبینید اینجا EncoderFactory به EncoderFactoryInterface به اصطلاح bind شده که البته اینم واسم سواله که توی کیس ما به این صورت bind کردن درسته یا نه؟ منظورم اینه که اگر فردا روزی خواستیم از یه factory دیگه استفاده کنیم، باید بیایم توی این provider و به جای EncoderFactory از factory دیگه ای که مد نظرمونه استفاده کنیم؟

و سوال دیگه‌م هم اینه که اینجا ما الان به عنوان پارامتر دوم متد addEncoderFactoryچی باید پاس بدیم؟

سلام. بله این قابلیت کمک میکنه بقیه بتونن Factory رو تغییر بدین یا اون رو توسعه بدن و این طور نیست که صد در صد همینجا تغییر کنه و مثلا ممکنه داخل یک پکیج این قابلیت رو داشته باشن چون خیلی بعید به نظر میرسه که ما مثلا خودمون دوتا Factory داشته باشیم و در بهترین حالت ما Factory هامون رو Compose می‌کنیم و فقط جدید رو به جای قدیمی bind می‌کنیم.


اگر کدها رو دیده باشین پارامتر دوم از جنس callable هست که یه تابع باید ارسال بشه چون میخواستیم کسی که میخواد یه Encoder اضافه کنه (همون توسعه دهنده پیکج) بتونه خودش آبجکت خودش رو config کنه.

بهترین پاسخ
کیوان علی محمدی ۲۵ فروردین ۱۴۰۲، ۱۰:۰۲