امروز بحث رو اندکی تخصصی تر میکنیم و میریم سمت container قدرتمند لاراول. یکی از مشخصه هایی که لاراول رو از سایر فریمورک های PHP جدا میکنه ، همین IOC هست. Dependency injection  یا DI یا تزریق نیازمندیها یک موضوع مهم در همه زبانهای شئ گراست. اینکه شما سایر کلاسها رو در کلاس خودتون استفاده کنید خیلی مهمه… 

اما IOC کانتینر چیست؟

برای اینکه از یک کلاس در کدمون استفاده کنیم باید از اون نمونه بگیریم. یه چیزی مثل کد زیر :

 

حتما بارها شده که مقدار  Request $request  رو بعنوان ورودی به یک تابع در کنترلر میفرستید . سوالی که پیش میاد اینه که بدون نمونه گرفتن از کلاس Request چطور php اونو میشناسه؟ اینجاست که کاربرد IOC مشخص میشه. لاراول با کانتینرش شرایطی رو مهیا کرده که شما به راحتی با آبجکت ها کار کنید… لاراول وقتی کدی مثل FOO $foo  رو میبینه دنبال کلاس FOO میگرده که از اون نمونه بگیره. این خیلی خوبه. شما بدون اینکه از کلاس نمونه بگیرید نمونه گرفته میشه. بعضی وقتا پیش میاد که شما میخواید یک ریپازیتوری بنویسید که دیگران هم بتونن ازش استفاده کنن. اینجا نیاز هست که کلاس خودتون رو به لاراول برای نمونه گیری معرفی کنید و شما باید بصورت دستی کلاس رو به IOC بچسبونید یا به اصطلاح bind کنید.

نحوه ی bind یک کلاس به IOC در لاراول

در کد بالا EloquentUserRepository رو چسبوندیم به کانتینر و از این به بعد لاراول کلاس EloquentUserRepository رو میشناسه همه جا.

برای اطلاعات بیشتر کتاب Laravel: From Apprentice To Artisan رو که نوشته تیلور آتول -سازنده لاراول – هست رو بخونید


حمید

حمید حق دوست هستم، توسعه دهنده وب و علاقمند به یادگیری ماشین و داده های حجیم! لاراول رو دوست دارم ولی دلیل نمیشه که از علاقم به جاوا اسکریپت کم کنه و سعی میکنم جفتشونو داشته باشم :)

4 دیدگاه

یک برنامه نویس تازه کار · فروردین ۲۱, ۱۳۹۵ در ۶:۴۷ ق.ظ

سلام. ممنون از مطلب خوبتون. بارها از IoC استفاده کردین که به نظرم بهتر هستش بگین که مخفف چی هستش

    حمید · فروردین ۲۱, ۱۳۹۵ در ۸:۴۰ ق.ظ

    سلام ُ مرسی . inversion of control 🙂

یک برنامه نویس تازه کار · فروردین ۲۱, ۱۳۹۵ در ۶:۵۰ ق.ظ

و باز هم سلام. یه مورد دیگه اینکه بهتره بگین که چند نوع DI داریم که اینی که الان داریم استفاده می کنیم بهش میگن type-hint که می تونه به صورت constructor DI باشه یا به صورت setter DI
ممنون از مطلب خوبتون

    حمید · فروردین ۲۱, ۱۳۹۵ در ۸:۴۶ ق.ظ

    شما فرمودید دیگههه . خیلی مرسی بابت نظر مفیدتون

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *