در حال بارگذاری ... .

view composer چه کاربردی دارد؟

گاهی نیاز می شود که بین view های مختلف اطلاعات مشابهی رو ارسال کنیم . به صورت عادی ما باید بیایم و داخل کنترلر ها هر جا که نیاز هست اش این مقادیر رو بدست بیاریم و ارسال کنیم .

حالا فرض کنید که ما نزدیک ۳۰ تا کنترلر داریم چه اتفاقی می افته. مقدار زیادی کد تکراری که یک کار مشابه رو انجام می دهند.

در این زمان هست که view composer به کار می یاد .

view composer ها به ما این امکان رو می دهند که بتوانیم کد های خودمون رو به خارج از کنترلر ببریم و از اونجا به ویو های مورد نظرمون پاس بدیم و نیاز نیست که برای هر ویو این کار جداگانه انجام بشه.

پیاده سازی view composer

فایل های مربوط به composer ها در پوشه App/Http/View/Composers  قرار می گیرند . اگر پوشه وجود نداشت نگران نباشید چون به صورت پیشفرض وجود ندارند و باید ایجاد کنیم .

داخل این پوشه یه کلاس برای composer امون انتخاب می کنیم  ما اسم اش رو statesComposer  انتخاب می کنیم .

داخل این فایل شروع به ایجاد کلاسمون می کنیم .

این کلاس دقت داشته باشید که حتما یک تابع compose داره .

کد زیر رو ببیند ببینید :

 

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

خوب تا حالا ما فقط یک کلاس ایجاد کردیم که فعلا داخل لاراول رجیستر یا بوت نشده و عملا فعلا هیچ استفاده ای برامون نداره.

نحوه استفاده از view composer در view

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

همونطور که می دونیم provider ها در مسیر App/Provider قرار دارند . شما می تونید این کلاس رو داخل AppServiceProvider در متد boot قرار بدید یا نه یه serviceprovider جدید برای composes ایجاد کنید و تمام composer ها رو داخل اون معرفی کنید.

دقت داشته باشید که اگه یه serviceprovider جدید ساختید حتما باید اون رو داخل فایل Config/app.php در آرایه providers وارد کنید.

ComposerServiceProvider که ما ساختیم به شکل زیر هست اش.

داخل تابع بوت این provider ما اومدیم گفتیم که هر وقت هر view رو load کردی از کلاس ما یعنی همون statesComposer تابع compose  رو صدا بزن منظورم این خط هست اش

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

حالا اگر بخواهیم برای یک ویو این کار رو بکنیم به جای * اسم اون view رو وارد می کنیم و اگر هم بخواهیم چند تا ویو رو انتخاب کنیم می یایم و به صورت آرایه اسم view ها رو بهش می دهیم.

نحوه دسترسی به این متغییر هم دقیقا مثل متغییری هست که از طریق کنترلر پاس می دهیم و هیچ فرقی نمی کنه.

, , , , ,
اشتراک گذاری:

مایل به ثبت دیدگاه هستید؟

آخرین دیدگاه‌ها

آخرین دیدگاه‌ها