سلام
در لاراول وقتي يك ريسورس كنترلر ميسازيم يكي از اون هفت فانكشن اصلي فانكشن store هست كه به صورت پيش فرض آرگومانش كلاس Request هست كه همان كلاس ريكوئست هست و از اون شي ساختيم و درون فانكشن استور استفاده ميكنيم مثل مبحث گرفتن مقادير داخل فرمي كه كاربر وارد كرده
حالا سوالم اينه مفهوم شي گرايي رو در اين يك مورد متوجه نشدم.
چطور ما ميتونيم از يك كلاس درون يك فانكشني مثل استور استفاده كنيم در صورتي كه خود فانكشن استور متعلق به يك كلاس كنترلر هست !
تشكر
سلام. شما کلاس Request
رو به متد store
پاس نمیدین، یه آبجکت از اون رو اینجکت میکنین. تازه اگه اینجکت نکنین میتونین داخل بدنه متد هم یه آبجکت از هر کلاسی بسازین، ولی ساختن آبجکت داخل متد توصیه نمیشه چون تست رو مشکل میکنه و غیره، برای همین اینجکت میکنیم تا وابستگی کمتر بشه.
https://laravel.com/docs/8.x/container
@muhammad
اين بحث illuminate همون import از كلاس هاي ديگر برنامه هست؟ يعني به جاي اينكه ارث بري كنيم با illuminate ميتونيم از اون كلاس در متدهامون دسترسي داشته باشيم و استفاده كنيم؟
به این کار میگند Type Hinting
لاراول ابتدا داخل Service Container رو میگرده اگر اونجا بایندی با این اسم باشه که کلاس رو برات بر میگردونه و اگر چیزی پیدا نکنه ، نهایتا Binding Resolution Exception میگیری
از اونجایی که کلاس Request توی آرایه alias در فایل کانفیگ هست
پس به صورت پیش فرض داخل Container هم هست
@arminbeik
اون Illuminate در واقع namespace لاراوله، مثل اینکه namespace پروژه شما توی لاراول App هست. (البته قبلا قابل تغییر بود، برش داشتن)
آقای بیات هم راجع به اینکه چطور کلاس Request ازش نمونه ساخته میشه توضیح دادن. کانتینر لاراول رو مثل یه یخچال در نظر بگیرید که پنیر رو داخلش گذاشتین. وقتی علاوه بر اسم پارامتر یه کلاس هم به عنوان type بذارین، نمونه توسط Service Provider لاراول ساخته میشه:
function store(ClassName $classInstance) {}
لینکی که فرستادم رو اگه ملاحظه کرده باشین، میبینین که مثالی از Repository Pattern آورده که به جای ساختن نمونه داخل بدنه متد، اون رو توی پارامترها پاس داده و اصطلاحا اینجکت کرده.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟