رتبه موضوع:
  • 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
پاسخ
 


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش اعتبار سنجی در لاراول 5 alihossein 4 773 11-20-2016, 07:12 AM
آخرین ارسال: حمید رﺽا کمالی
  آموزش روتینگ routing در لاراول 5 alihossein 2 1,129 11-12-2016, 04:37 AM
آخرین ارسال: حمید رﺽا کمالی
  آموزش کار با دیتابیس در لاراول 5 alihossein 6 1,555 10-27-2016, 01:01 PM
آخرین ارسال: sempaisaleh
  منظور از view creator چیست tux-world 3 233 09-08-2016, 12:34 PM
آخرین ارسال: mostafa.miri65
  آموزش Migration در لاراول 5 alihossein 9 1,167 08-15-2016, 04:17 PM
آخرین ارسال: Naser.SherafatiNia
  آموزش فارسی لاراول ۵ alihossein 4 2,865 07-22-2016, 04:16 PM
آخرین ارسال: elham_malekmohamadi
  # سوال : آموزش ساخت ربات تلگرام با پکیج irazasyed/telegram-bot-sdk Bvk.Programmer 0 235 04-25-2016, 04:54 PM
آخرین ارسال: Bvk.Programmer
  درخواست آموزش کار با پکیج intervention/image Bvk.Programmer 6 492 04-18-2016, 05:52 PM
آخرین ارسال: hamo
Rainbow آموزش : پکیچ کاربردی ajax-blade Bvk.Programmer 0 201 02-15-2016, 06:04 PM
آخرین ارسال: Bvk.Programmer
  آموزش Session ها در لاراول 5 alihossein 1 664 01-29-2016, 12:33 PM
آخرین ارسال: SajadDP

پرش به انجمن:


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

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

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