آرمین
3 سال پیش توسط آرمین مطرح شد
4 پاسخ

استفاده از كلاس و ساخت شي درون فانكشن لاراول

سلام
در لاراول وقتي يك ريسورس كنترلر ميسازيم يكي از اون هفت فانكشن اصلي فانكشن store هست كه به صورت پيش فرض آرگومانش كلاس Request هست كه همان كلاس ريكوئست هست و از اون شي ساختيم و درون فانكشن استور استفاده ميكنيم مثل مبحث گرفتن مقادير داخل فرمي كه كاربر وارد كرده
حالا سوالم اينه مفهوم شي گرايي رو در اين يك مورد متوجه نشدم.
چطور ما ميتونيم از يك كلاس درون يك فانكشني مثل استور استفاده كنيم در صورتي كه خود فانكشن استور متعلق به يك كلاس كنترلر هست !
تشكر


ثبت پرسش جدید
Muhammad
تخصص : Back-End Developer
@muhammad 3 سال پیش مطرح شد
1

سلام. شما کلاس Request رو به متد store پاس نمی‌دین، یه آبجکت از اون رو اینجکت می‌کنین. تازه اگه اینجکت نکنین می‌تونین داخل بدنه متد هم یه آبجکت از هر کلاسی بسازین، ولی ساختن آبجکت داخل متد توصیه نمیشه چون تست رو مشکل می‌کنه و غیره، برای همین اینجکت می‌کنیم تا وابستگی کمتر بشه.
https://laravel.com/docs/8.x/container


آرمین
@arminbeik 3 سال پیش مطرح شد
0

@muhammad
اين بحث illuminate همون import از كلاس هاي ديگر برنامه هست؟ يعني به جاي اينكه ارث بري كنيم با illuminate ميتونيم از اون كلاس در متدهامون دسترسي داشته باشيم و استفاده كنيم؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 3 سال پیش مطرح شد
1

به این کار میگند Type Hinting

لاراول ابتدا داخل Service Container رو میگرده اگر اونجا بایندی با این اسم باشه که کلاس رو برات بر میگردونه و اگر چیزی پیدا نکنه ، نهایتا Binding Resolution Exception میگیری
از اونجایی که کلاس Request توی آرایه alias در فایل کانفیگ هست
پس به صورت پیش فرض داخل Container هم هست


Muhammad
تخصص : Back-End Developer
@muhammad 3 سال پیش مطرح شد
1

@arminbeik
اون Illuminate در واقع namespace لاراوله، مثل اینکه namespace پروژه شما توی لاراول App هست. (البته قبلا قابل تغییر بود، برش داشتن)

آقای بیات هم راجع به اینکه چطور کلاس Request ازش نمونه ساخته میشه توضیح دادن. کانتینر لاراول رو مثل یه یخچال در نظر بگیرید که پنیر رو داخلش گذاشتین. وقتی علاوه بر اسم پارامتر یه کلاس هم به عنوان type بذارین، نمونه توسط Service Provider لاراول ساخته میشه:

function store(ClassName $classInstance) {}

لینکی که فرستادم رو اگه ملاحظه کرده باشین، می‌بینین که مثالی از Repository Pattern آورده که به جای ساختن نمونه داخل بدنه متد، اون رو توی پارامترها پاس داده و اصطلاحا اینجکت کرده.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام