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

View ها

۱٫ کاربرد پایه ای

· ارسال داده به View ها

· به اشتراک گذاری داده ها بین تمامی view ها

۲٫ View Composers

کاربرد پایه ای

View کد HTML اپلیکیشن تحت وب را شامل می شود و منطق کاری برنامه / کنترلر را از لایه ی نمایش و رابط کاربری آن جدا می سازد. فایل های view همگی در پوشه ی resources/views ذخیره می شوند.

یک فایل ساده ی view حاوی کد زیر می باشد:

Hello,

چون که view مورد نظر در آدرس resources/views/greeting.php ذخیره می شود، می توانیم آن را به وسیله ی متد کمکی view به صورت زیر برگردانیم (به مرورگر ارسال کنیم):

Route::get(‘/’, function () {

return view(‘greeting’, [‘name’ => ‘James’]);

});

همان طور که می بینید، اولین آرگومان ارسالی به متد کمکی view با اسم فایل view مقیم در پوشه ی resources/views کاملا منطبق می باشد. آرگومان دومی که به متد کمکی پاس داده شده، آرایه ای از داده ها که بایستی در اختیار view قرار داده شود. در این مثال، متغیر name را به عنوان پارامتر دوم به متد کمکی view پاس می دهیم که به وسیله ی تابع echo پی اچ پی در view به نمایش گذاشته شده بود.

دقت داشته باشید که view ها را می توان به صورت تودرتو داخل زیر پوشه هایی از پوشه ی اصلی resources/views نیز گنجاند. برای دسترسی به به view های تودرتو بایستی از عملگر نقطه ” . ” استفاده نمایید. برای مثال اگر view شما در آدرس resources/views/admin/profile.php ذخیره شده باشد، در آن صورت برای ارجاع و دسترسی به آن می بایست به صورت زیر اقدام نمایید:

return view(‘admin.profile’, $data);

بررسی وجود یا عدم وجود یک view

برای بررسی اینکه آیا یک view مشخص وجود دارد یا خیر، می توانید متد exists را پس از فراخوانی تابع کمکی view بدون ارسال پارامتر ورودی به آن (view)، اجرا نمایید. این تابع در صورتی که view مورد نظر در حافظه موجود باشد، مقدار بولی true را برمی گرداند:

if (view()->exists(’emails.customer’)) {

//

}

زمانی که تابع کمکی view را بدون ارسال آرگومان به آن صدا می زنید، لاراول یک نمونه از Illuminate\Contracts\View\Factory را برمی گرداند و تمامی متدهای این کلاس را در اختیار شما قرار می دهد.

داده های view

ارسال داده به view

همان طور که در مثال قبلی مشاهده شد، می توان به راحتی آرایه ای از داده ها را به view ارسال کرد (که در اینجا آرایه ای به نام name حاوی مقدار Victoria می باشد):

return view(‘greetings’, [‘name’ => ‘Victoria’]);

به هنگام ارسال اطلاعات به این روش، $data بایستی آرایه متشکل از جفت های کلید/مقدار باشد. سپس می توانید داخل view با استفاده از کلید متناظر به هر یک از این مقادیر دسترسی داشته باشید، مانند این نمونه: <?php echo $key; ?>. بجای اینکه آرایه ای از داده ها را به صورت یک بسته ی کامل به تابع کمکی view ارسال کنید، می توانید با متد with داده ها را به صورت تکه های مجزا به تابع مزبور پاس دهید:

$view = view(‘greeting’)->with(‘name’, ‘Victoria’);

به اشتراک گذاری داده ها بین تمامی view ها

گاهی لازم است اطلاعاتی را بین تمامی view های به نمایش گذاشته شده توسط برنامه به اشتراک بگذارید (داده ای را در تمامی صفحات برنامه ی تحت وب نمایش دهید). برای نیل به این هدف می توان متد share از Illuminate\Contracts\View\Factory را فراخوانی کرد. به طور معمول فراخوانی این متد را داخل تابع boot از service provider انجام می دهیم. البته در صورت تمایل می توانید فراخوانی این متد را در AppServiceProvider قرار داده یا یک service provider مجزا تعریف نمایید که نقش میزبان را برای آن ایفا کند:

share(‘key’, ‘value’);

}

/**

* Register the service provider.

*

* @return void

*/

public function register()

{

//

}

}

View Composers

View composer ها توابع callback یا متدهایی از کلاس هستند که در زمان به نمایش گذاشته شدن (render) view فراخوانی می شوند. فرض بگرید داده هایی دارید که می خواهید با هر بار نمایش view به آن bind شود. view composer ها با قرار دادن این منطق و سازماندهی آن در مکانی یکسان می تواند کمک شایانی در این زمینه به شما بکند.

حال می خواهیم view composer ها را در یک service provider ثبت و ایجاد کنیم. برای دسترسی به پیاده سازی زیرین کانترکت (contract) Illuminate\Contracts\View\Factory از تابع کمکی view استفاده می کنیم. لازم به ذکر است که لاراول یک پوشه ی پیش فرض برای نگهداری view composer ها در نظر نمی گیرد، از این رو در سازمان دهی آن ها کاملا آزادید. به عنوان مثال می توانید یک پوشه به این نام App\Http\ViewComposers ایجاد کرده و view composer ها را در آن ذخیره نمایید:

composer(

‘profile’, ‘App\Http\ViewComposers\ProfileComposer’

);

// Using Closure based composers…

view()->composer(‘dashboard’, function ($view) {

});

}

/**

* Register the service provider.

*

* @return void

*/

public function register()

{

//

}

}

به خاطر داشته باشید که اگر یک service provider جدید برای دربرگرفتن و نگهداری تعریف و ثبت composer ها را ایجاد کنید، در آن صورت بایستی حتما service provider مورد نظر را به آرایه ی providers در فایل پیکربندی (config) config/app.php اضافه نمایید.

پس از تعریف و ثبت composer، خواهید دید که هر بار ویو profile نمایش داده می شود همزمان با آن متد ProfileComposer@compose نیز صدا زده می شود. اکنون می بایست کلاس composer را ایجاد کنیم:

users = $users;

}

/**

* Bind data to the view.

*

* @param View $view

* @return void

*/

public function compose(View $view)

{

$view->with(‘count’, $this->users->count());

}

}

درست قبل از اینکه view نمایش داده شود، متد compose متعلق به composer همراه با نمونه ی Illuminate\Contracts\View\View فراخوانی می گردد. سپس داده ها به وسیله ی متد with به view متصل (bind) می شوند.

توجه: تمامی composer ها توسط service container تشخیص داده و شناسایی می شوند، از این رو می توانید dependency های مورد نیاز را داخل متد سازنده (constructor) composer اعلان نوع (type-hint) نمایید.

الحاق کردن یک Composer به چندین View

می توانید یک view composer را همزمان به چندین view پیوست کنید. برای این منظور کافی است آرایه ای از view ها را به عنوان آرگومان اول به متد composer ارسال نمایید:

view()->composer(

[‘profile’, ‘dashboard’],

‘App\Http\ViewComposers\MyViewComposer’

);

متد composer کاراکتر * را به عنوان یک پارامتر wildcard می پذیرد و به شما اجازه می دهد یک composer را به تمامی view الحاق کنید:

view()->composer(‘*’, function ($view) {

//

});

View Creator ها

View creator ها بسیار شبیه به view composer ها هستند با این تفاوت که با ایجاد شدن یک نمونه از view بلافاصله اجرا می شوند و منتظر نمی مانند view برای نمایش داده شدن آماده شود. برای ثبت یک view creator جدید، می بایست متد creator را فراخوانی نمایید:

view()->creator(‘profile’, ‘App\Http\ViewCreators\ProfileCreator’);