نسخه:

بازدیدها

استفاده پایه

نماها حاوی 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');