بازدیدها
استفاده پایه
نماها حاوی HTML ارائه شده توسط برنامه شما هستند و به عنوان روشی مناسب برای جداسازی منطق کنترل کننده و دامنه شما از منطق ارائه شما عمل می کنند.
نماها در
resources/views
فهرست ذخیره می شوند.
یک نمای ساده به این صورت است:
<!-- View stored in resources/views/greeting.php --> <html> <body> <h1>Hello, <?php echo $name; ?></h1> </body></html>
نمای ممکن است به این ترتیب به مرورگر بازگردانده شود:
Route::get('/', function(){ return view('greeting', ['name' => 'James']);});
همانطور که می بینید، اولین آرگومان ارسال شده به
view
helper مربوط به نام فایل view در
resources/views
دایرکتوری است.
دومین آرگومان ارسال شده به helper آرایه ای از داده هاست که باید در دسترس view قرار گیرد.
البته، نماها نیز ممکن است در زیر شاخه های دایرکتوری تودرتو باشند
resources/views
.
به عنوان مثال، اگر نمای شما در ذخیره شده است
resources/views/admin/profile.php
، باید به صورت زیر برگردانده شود:
return view('admin.profile', $data);
انتقال داده به نماها
// Using conventional approach$view = view('greeting')->with('name', 'Victoria'); // Using Magic Methods$view = view('greeting')->withName('Victoria');
در مثال بالا، متغیر
$name
برای view قابل دسترسی است و حاوی
Victoria
.
در صورت تمایل، می توانید آرایه ای از داده ها را به عنوان پارامتر دوم به
view
کمک کننده ارسال کنید:
$view = view('greetings', $data);
هنگام انتقال اطلاعات به این روش،
$data
باید یک آرایه با جفت کلید/مقدار باشد.
در داخل نمای خود، سپس می توانید با استفاده از کلید مربوطه به هر مقدار، مانند
{{ $key }}
(با فرض
$data['key']
وجود) دسترسی داشته باشید.
اشتراک گذاری داده ها با همه نماها
گاهی اوقات، ممکن است لازم باشد بخشی از داده را با همه نماهایی که توسط برنامه شما ارائه می شود به اشتراک بگذارید.
شما چندین گزینه دارید:
view
کمک کننده،
Illuminate\Contracts\View\Factory
قرارداد
، یا یک
composer نمای
عام .
به عنوان مثال، با استفاده از
view
کمک کننده:
view()->share('data', [1, 2, 3]);
همچنین می توانید از
View
نما استفاده کنید:
View::share('data', [1, 2, 3]);
share
معمولاً، فراخوانی متد را در متد ارائهدهنده خدمات
قرار میدهید
boot
.
شما آزاد هستید که آنها را به آن اضافه کنید
AppServiceProvider
یا یک ارائه دهنده خدمات جداگانه برای نگهداری آنها ایجاد کنید.
توجه: هنگامی که
view
کمک کننده بدون استدلال فراخوانی می شود، اجرای قرارداد را برمی گرداندIlluminate\Contracts\View\Factory
.
تعیین اینکه آیا دیدگاه وجود دارد
اگر نیاز به تعیین وجود نما دارید، می توانید از
exists
روش زیر استفاده کنید:
if (view()->exists('emails.customer')){ //}
بازگشت نمایی از مسیر فایل
در صورت تمایل، می توانید یک نمای از یک مسیر فایل کاملاً واجد شرایط ایجاد کنید:
return view()->file($pathToFile, $data);
نمایش composerان
View composer ها callback یا متدهای کلاسی هستند که هنگام رندر شدن یک view فراخوانی می شوند. اگر دادههایی دارید که میخواهید هر بار که آن نما ارائه میشود به یک نما متصل شود، یک View Composer آن منطق را در یک مکان سازماندهی میکند.
تعریف View Composer
بیایید composerان دیدگاه خود را در یک
ارائه دهنده خدمات
سازماندهی کنیم .
ما از
View
نما برای دسترسی به اجرای قرارداد اساسی استفاده خواهیم کرد
Illuminate\Contracts\View\Factory
:
<?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 the service provider. * * @return void */ public function register() { // } }
توجه: لاراول یک دایرکتوری پیشفرض برای View Composers ندارد. شما آزاد هستید که آنها را هر طور که می خواهید سازماندهی کنید. به عنوان مثال، می توانید یک
App\Http\ViewComposers
دایرکتوری ایجاد کنید.
به یاد داشته باشید، باید ارائه دهنده سرویس را به
providers
آرایه موجود در
config/app.php
فایل پیکربندی اضافه کنید.
اکنون که composer را ثبت کرده ایم، هر بار که
view در حال رندر شدن است،
ProfileComposer@compose
متد اجرا می شود .
profile
بنابراین، بیایید کلاس composer را تعریف کنیم:
<?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()); } }
درست قبل از رندر شدن نما، متد composer
compose
با
Illuminate\Contracts\View\View
نمونه فراخوانی می شود.
می توانید از این
with
روش برای اتصال داده ها به نما استفاده کنید.
توجه: همه نویسندگان view از طریق کانتینر سرویس حل میشوند ، بنابراین میتوانید وابستگیهایی را که در سازنده یک composer نیاز دارید تایپ کنید.
Wildcard View Composers
این
composer
روش
*
کاراکتر را بهعنوان یک علامت عام میپذیرد، بنابراین میتوانید یک composer را به همه نماهایی مانند این ضمیمه کنید:
View::composer('*', function($view){ //});
پیوست کردن یک composer به چندین نمایش
همچنین میتوانید یک View composer را به چندین نما به طور همزمان پیوست کنید:
View::composer(['profile', 'dashboard'], 'App\Http\ViewComposers\MyViewComposer');
تعریف چند composer
می توانید از این
composers
روش برای ثبت گروهی از composerان به طور همزمان استفاده کنید:
View::composers([ 'App\Http\ViewComposers\AdminComposer' => ['admin.index', 'admin.profile'], 'App\Http\ViewComposers\UserComposer' => 'user', 'App\Http\ViewComposers\ProductComposer' => 'product']);
مشاهده سازندگان
نمایش
سازندگان
تقریباً دقیقاً مانند composerان View کار می کنند.
با این حال، آنها بلافاصله پس از نمایش نمونه، شلیک می شوند.
برای ثبت یک View Creator از
creator
روش زیر استفاده کنید:
View::creator('profile', 'App\Http\ViewCreators\ProfileCreator');