رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش view composer در لاراول 5
#1
در فریم ورک لاراول معمولا برای ارسال یک داده به یک view خاص بصورت زیر عمل میکنیم :
کد پی‌اچ‌پی:
return view('example')->with('var' $var); 
اما گاهی پیش میاد که شما میخواید یک داده رو بین چند view یا حتی یک مقدار رو بین همه ی view ها به اشتراک بذارید… برای این کار از ۳ روش پیش رو داریم :

استفاده از  view helper
استفاده از contract
استفاده از view composer
من در این مقاله روش سوم رو توضیح میدم. مورد ۱ و ۲ رو مختصرا توضیح میدم :
برای مثال برای view helper :
کد پی‌اچ‌پی:
view()->share('data', [123]); 


یا ممکنه از view facade استفاده کنید :
کد پی‌اچ‌پی:
View::share('data', [123]); 

معمولا متد  share  رو توی متد  boot توی یک  service provider  قرار میدیم. شما مختارید که اونو توی  AppServiceProvider  قرار بدید یا service provider دلخواه خودتون رو ایجاد کنید…

تعریف در صورت ایجاد شدن متد :
اگه میخواید چک کنید که ویوی مورد نظر ایجاد شده یا نه میتونید از متد exist استفاده کنید :
کد پی‌اچ‌پی:
if (view()->exists('emails.customer'))
{
 
   //


  و اما  View Composer ها :

متدی هستند که در صورت رندر شدن ویوی مورد نظر اجرا میشن…اگه شما داده ای دارید که میخواید هر بار که ویوی مورد نظر اجرا میشه بهش ارسال کنید ، ویو کمپوزر ها منطق جالبی برای این کار دارن…
تعریف یک ویو کمپوزر – View Composer :
بیاید کمپوزرمون رو با یه مهیا کننده ی سرویس پیاده کنیم:
کد پی‌اچ‌پی:
<?php namespace App\Providers;

use 
View;
use 
Illuminate\Support\ServiceProvider;

class 
ComposerServiceProvider extends ServiceProvider {

 
   /**
     * Register bindings in the container.
     *
     * @return void
     */
 
   public function boot()
 
   {
 
       // Using class based composers...
 
       View::composer('profile''App\Http\ViewComposers\ProfileComposer');

 
       // Using Closure based composers...
 
       View::composer('dashboard', function($view)
 
       {

 
       });
 
   }

 
   /**
     * Register
     *
     * @return void
     */
 
   public function register()
 
   {
 
       //
 
   }



یادتون باشه که service providerتون رو توی آرایه ی providers توی فایل  config/app.php  ثبت کنید حتما…

حالا که کمپوزرمون رو ثبت کردیم ، هر بار که ویوی  profile  رندر میشه ، متد  ProfileComposer@compose  هم اجرا میشه… پس بیاید کلاس کمپوزر رو تعریف کنیم :
کد پی‌اچ‌پی:
<?php namespace App\Http\ViewComposers;

use 
Illuminate\Contracts\View\View;
use 
Illuminate\Users\Repository as UserRepository;

class 
ProfileComposer {

 
   /**
     * The user repository implementation.
     *
     * @var UserRepository
     */
 
   protected $users;

 
   /**
     * Create a new profile composer.
     *
     * @param  UserRepository  $users
     * @return void
     */
 
   public function __construct(UserRepository $users)
 
   {
 
       // Dependencies automatically resolved by service container...
 
       $this->users $users;
 
   }

 
   /**
     * Bind data to the view.
     *
     * @param  View  $view
     * @return void
     */
 
   public function compose(View $view)
 
   {
 
       $view->with('count'$this->users->count());
 
   }


دقیقا قبل از اینکه ویوی موردنظر رندر بشه ، متد  compose  کمپوزر فراخوانی میشه…

البته میتونید داخل همان provider که ساختید همونجا کارای view Composer را انجام بدین و دیگه به فایل دیگه ای پاس ندین .
کد پی‌اچ‌پی:
<?php namespace App\Providers;

use 
Illuminate\Support\Facades\View;
use 
Illuminate\Support\ServiceProvider;
use 
Illuminate\View\ViewServiceProvider;

class 
MyProvider extends ServiceProvider {

 
/**
 * Bootstrap the application services.
 *
 * @return void
 */
 
public function boot()
 
   {
 
       \View::composer(['home','home2'],function($view){
 
           return $view->with('names',['ali','danyal','reza']);
 
       });
 
      
 
}

 
/**
 * Register the application services.
 *
 * @return void
 */
 
public function register()
 {
 
//
 
}





چسباندن یک composer به چند view :
کد پی‌اچ‌پی:
View::composer(['profile''dashboard'], 'App\Http\ViewComposers\MyViewComposer'); 

تعریف مضاعف کمپوزر ها :
کد پی‌اچ‌پی:
View::composers([
 
   'App\Http\ViewComposers\AdminComposer' => ['admin.index''admin.profile'],
 
   'App\Http\ViewComposers\UserComposer' => 'user',
 
   'App\Http\ViewComposers\ProductComposer' => 'product'
]); 
قوانین انجمن لاراولیستا  | شماره تماس :‌09124783045 |‌ تلگرام :‌ 09377869283 |‌ مدیریت کانال تلگرام
پاسخ
 


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  صفحه بندی در لاراول ۵.۵ sadaf 0 54 10-26-2017, 09:26 PM
آخرین ارسال: sadaf
  سرور برای لاراول mahmood_20050 0 40 10-24-2017, 10:00 AM
آخرین ارسال: mahmood_20050
  گرفتن آپدیت های وب هوک تلگرام در لاراول Mr.AMiR 6 255 09-19-2017, 04:30 AM
آخرین ارسال: Bvk.Programmer
  خطای نصب لاراول dmbehrouz 0 45 09-07-2017, 01:11 PM
آخرین ارسال: dmbehrouz
  مشکل افت سرعت وقتی از لاراول به جای php استفاده می کنم Zahir 1 111 08-31-2017, 08:40 AM
آخرین ارسال: imanghafoori
  آموزش اعتبار سنجی در لاراول 5 alihossein 5 1,307 07-30-2017, 08:47 AM
آخرین ارسال: shima71
  آموزش فارسی لاراول ۵ alihossein 7 3,857 07-28-2017, 06:44 PM
آخرین ارسال: shima71
  انتقال سایت mvc به لاراول miladhassan 1 95 07-26-2017, 09:01 AM
آخرین ارسال: fery
Question راه اندازی لاراول روی سیستم افلاین؟ fery 0 64 07-26-2017, 08:55 AM
آخرین ارسال: fery
Sad مشکل در ایجاد وبلاگ در لاراول 5.4 itroz 0 101 07-05-2017, 05:03 PM
آخرین ارسال: itroz

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

درباره انجمن فریم ورک لاراول

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