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


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش فارسی لاراول ۵ alihossein 6 3,210 05-26-2017, 09:52 AM
آخرین ارسال: farhad
  گرفتن آپدیت های وب هوک تلگرام در لاراول Mr.AMiR 1 30 05-11-2017, 11:30 AM
آخرین ارسال: Mr.AMiR
  بهترین پکیج acl برای لاراول چیست homeily@gmail.com 3 159 05-08-2017, 09:27 AM
آخرین ارسال: Geppeto
  لینک فایل های css و js در لاراول saeed.rahgooy@gmail.com 1 43 05-01-2017, 07:50 PM
آخرین ارسال: zootech
  ساخت authentication شخصی یا استفاده از authentication لاراول meysam_biz 0 64 03-19-2017, 05:38 PM
آخرین ارسال: meysam_biz
  درخواست راهنمایی : تعریف سطوح دسترسی کاربری در لاراول Bvk.Programmer 11 1,017 02-16-2017, 10:09 PM
آخرین ارسال: ansar
  # سوال : آموزش ساخت ربات تلگرام با پکیج irazasyed/telegram-bot-sdk Bvk.Programmer 1 435 02-16-2017, 09:55 PM
آخرین ارسال: ansar
  بازسازی composer.json Cloud 0 59 01-08-2017, 10:52 PM
آخرین ارسال: Cloud
  آموزش اعتبار سنجی در لاراول 5 alihossein 4 1,021 11-20-2016, 07:12 AM
آخرین ارسال: حمید رﺽا کمالی
  نحوه ایجاد Token-Based Authentication(oauth2) در لاراول با استفاده از passport anonymox 0 156 11-12-2016, 06:27 AM
آخرین ارسال: anonymox

پرش به انجمن:


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

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

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