نسخه:

بازدیدها

معرفی

البته، بازگرداندن کل رشته های اسناد HTML مستقیماً از مسیرها و کنترلرها عملی نیست. خوشبختانه، نماها راهی مناسب برای قرار دادن تمام HTML ما در فایل‌های جداگانه ارائه می‌کنند.

نماها منطق کنترلر/برنامه شما را از منطق ارائه شما جدا می کنند و در resources/views دایرکتوری ذخیره می شوند. هنگام استفاده از لاراول، قالب‌های View معمولاً با استفاده از زبان قالب Blade نوشته می‌شوند . یک نمای ساده ممکن است چیزی شبیه به این باشد:

<!-- View stored in resources/views/greeting.blade.php -->
 
<html>
<body>
<h1>Hello, {{ $name }}</h1>
</body>
</html>

از آنجایی که این نما در ذخیره شده است ، ممکن است آن را با استفاده از راهنمای جهانی مانند زیر resources/views/greeting.blade.php برگردانیم : view

Route::get('/', function () {
return view('greeting', ['name' => 'James']);
});

به دنبال اطلاعات بیشتر در مورد نحوه نوشتن الگوهای Blade هستید؟ برای شروع، مستندات کامل Blade را بررسی کنید.

نوشتن Views در React / Vue

بسیاری از توسعه دهندگان به جای نوشتن قالب های ظاهری خود در PHP از طریق Blade شروع به نوشتن قالب های خود با استفاده از React یا Vue کرده اند. لاراول به لطف Inertia این کار را بدون درد انجام می دهد ، کتابخانه ای که اتصال React/Vue frontend خود را به باطن Laravel خود بدون پیچیدگی های معمولی SPA می سازد.

کیت‌های استارتر Breeze و Jetstream ما یک نقطه شروع عالی برای برنامه بعدی Laravel شما که توسط Inertia طراحی شده است، به شما می‌دهد. علاوه بر این، Laravel Bootcamp نمایش کاملی از ساخت یک برنامه Laravel با اینرسی ارائه می دهد، از جمله نمونه هایی در Vue و React.

ایجاد و ارائه نماها

.blade.php می توانید با قرار دادن یک فایل با پسوند در فهرست برنامه خود resources/views یا با استفاده از make:view دستور Artisan یک View ایجاد کنید :

php artisan make:view greeting

پسوند .blade.php به چارچوب اطلاع می دهد که فایل حاوی یک الگوی Blade است . قالب‌های Blade حاوی دستورالعمل‌های HTML و Blade هستند که به شما امکان می‌دهند به راحتی مقادیر را اکو کنید، عبارات «if» را ایجاد کنید، روی داده‌ها تکرار کنید و موارد دیگر.

هنگامی که یک View ایجاد کردید، می توانید آن را از یکی از مسیرها یا کنترلرهای برنامه خود با استفاده از view راهنمای جهانی بازگردانید:

Route::get('/', function () {
return view('greeting', ['name' => 'James']);
});

نماها همچنین ممکن است با استفاده از نما بازگردانده شوند View :

use Illuminate\Support\Facades\View;
 
return View::make('greeting', ['name' => 'James']);

همانطور که می بینید، اولین آرگومان ارسال شده به view helper مربوط به نام فایل view در resources/views دایرکتوری است. آرگومان دوم آرایه ای از داده ها است که باید در دسترس view قرار گیرد. در این حالت، متغیری را ارسال می کنیم که با استفاده از دستور Blade name در نمای نمایش داده می شود .

فهرست راهنماهای نمایش تودرتو

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

return view('admin.profile', $data);

نمایش نام دایرکتوری نباید حاوی . کاراکتر باشد.

ایجاد اولین نمای موجود

با استفاده از روش View نما first ، می توانید اولین نمای موجود در یک آرایه معین از نماها را ایجاد کنید. این ممکن است مفید باشد اگر برنامه یا بسته شما اجازه می دهد نماها سفارشی یا بازنویسی شوند:

use Illuminate\Support\Facades\View;
 
return View::first(['custom.admin', 'admin'], $data);

تعیین اینکه آیا یک View وجود دارد یا خیر

اگر نیاز به تعیین وجود نما دارید، می توانید از View نما استفاده کنید. اگر view وجود داشته باشد متد exists برمی گردد : true

use Illuminate\Support\Facades\View;
 
if (View::exists('admin.profile')) {
// ...
}

انتقال داده به Views

همانطور که در مثال‌های قبلی دیدید، می‌توانید آرایه‌ای از داده‌ها را به view‌ها ارسال کنید تا آن داده‌ها را در دسترس view قرار دهید:

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

هنگام انتقال اطلاعات به این روش، داده ها باید یک آرایه با جفت کلید / مقدار باشد. پس از ارائه داده به یک نما، سپس می توانید با استفاده از کلیدهای داده، مانند <?php echo $name; ?> .

به عنوان جایگزینی برای ارسال یک آرایه کامل از داده‌ها به view تابع کمکی، می‌توانید از with روشی برای افزودن تک تک داده‌ها به نمای استفاده کنید. متد with نمونه ای از شی view را برمی گرداند تا بتوانید قبل از برگرداندن view به زنجیره زدن متدها ادامه دهید:

return view('greeting')
->with('name', 'Victoria')
->with('occupation', 'Astronaut');

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

گاهی اوقات، ممکن است لازم باشد داده ها را با همه نماهایی که توسط برنامه شما ارائه می شود به اشتراک بگذارید. می توانید این کار را با استفاده از روش View نما انجام دهید share . به طور معمول، شما باید فراخوانی های share متد را در متد ارائه دهنده خدمات قرار دهید boot . شما آزاد هستید که آنها را به App\Providers\AppServiceProvider کلاس اضافه کنید یا یک ارائه دهنده خدمات جداگانه برای آنها ایجاد کنید:

<?php
 
namespace App\Providers;
 
use Illuminate\Support\Facades\View;
 
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
// ...
}
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
View::share('key', 'value');
}
}

نمایش composerان

View composer ها callback یا متدهای کلاسی هستند که هنگام رندر شدن یک view فراخوانی می شوند. اگر داده‌هایی دارید که می‌خواهید هر بار که آن نما ارائه می‌شود به یک نما متصل شود، یک View composer می‌تواند به شما کمک کند آن منطق را در یک مکان واحد سازماندهی کنید. اگر نمای یکسان توسط چندین مسیر یا کنترلر در برنامه شما بازگردانده شود و همیشه به یک قطعه داده خاص نیاز داشته باشد، ممکن است کامپوزیتورهای View بسیار مفید باشند.

به طور معمول، View composers در یکی از ارائه دهندگان خدمات برنامه شما ثبت می شود . در این مثال، فرض می کنیم که App\Providers\AppServiceProvider اراده این منطق را در خود جای داده است.

ما از روش View نما composer برای ثبت View composer استفاده می کنیم. لاراول یک دایرکتوری پیش‌فرض برای نویسندگان view مبتنی بر کلاس ندارد، بنابراین می‌توانید آنها را هر طور که می‌خواهید سازماندهی کنید. به عنوان مثال، می توانید یک app/View/Composers فهرست راهنما ایجاد کنید تا همه نویسندگان view برنامه خود را در خود جای دهد:

<?php
 
namespace App\Providers;
 
use App\View\Composers\ProfileComposer;
use Illuminate\Support\Facades;
use Illuminate\Support\ServiceProvider;
use Illuminate\View\View;
 
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
// ...
}
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
// Using class based composers...
Facades\View::composer('profile', ProfileComposer::class);
 
// Using closure based composers...
Facades\View::composer('welcome', function (View $view) {
// ...
});
 
Facades\View::composer('dashboard', function (View $view) {
// ...
});
}
}

اکنون که composer را ثبت کرده ایم، هر بار که view در حال رندر شدن باشد، compose متد App\View\Composers\ProfileComposer کلاس اجرا می شود . profile بیایید به نمونه ای از کلاس composer نگاهی بیندازیم:

<?php
 
namespace App\View\Composers;
 
use App\Repositories\UserRepository;
use Illuminate\View\View;
 
class ProfileComposer
{
/**
* Create a new profile composer.
*/
public function __construct(
protected UserRepository $users,
) {}
 
/**
* Bind data to the view.
*/
public function compose(View $view): void
{
$view->with('count', $this->users->count());
}
}

همانطور که می بینید، همه نویسندگان view از طریق کانتینر سرویس حل می شوند ، بنابراین می توانید هر وابستگی مورد نیاز خود را در سازنده یک composer تایپ کنید.

پیوست کردن یک composer به چند نما

می‌توانید با ارسال آرایه‌ای از نماها به‌عنوان اولین آرگومان به متد، یک View composer را به چندین نما به طور همزمان متصل کنید composer :

use App\Views\Composers\MultiComposer;
use Illuminate\Support\Facades\View;
 
View::composer(
['profile', 'dashboard'],
MultiComposer::class
);

این composer متد همچنین * کاراکتر را به‌عنوان عام می‌پذیرد و به شما امکان می‌دهد یک composer را به همه نماها متصل کنید:

use Illuminate\Support\Facades;
use Illuminate\View\View;
 
Facades\View::composer('*', function (View $view) {
// ...
});

مشاهده سازندگان

نمایش "سازندگان" بسیار شبیه به نمایش composerان است. با این حال، آنها بلافاصله پس از نمایش نمونه اجرا می شوند، به جای اینکه منتظر بمانند تا نمایش در شرف ارائه شود. برای ثبت یک View Creator از creator روش زیر استفاده کنید:

use App\View\Creators\ProfileCreator;
use Illuminate\Support\Facades\View;
 
View::creator('profile', ProfileCreator::class);

بهینه سازی نماها

به‌طور پیش‌فرض، نماهای قالب Blade در صورت تقاضا کامپایل می‌شوند. هنگامی که درخواستی اجرا می شود که یک View را ارائه می دهد، لاراول تعیین می کند که آیا نسخه کامپایل شده ای از view وجود دارد یا خیر. اگر فایل وجود داشته باشد، لاراول تعیین می کند که آیا نمای کامپایل نشده اخیراً نسبت به نمای کامپایل شده اصلاح شده است یا خیر. اگر نمای کامپایل شده وجود نداشته باشد یا نمای کامپایل نشده اصلاح شده باشد، لاراول نمای را دوباره کامپایل می کند.

کامپایل کردن نماها در طول درخواست ممکن است تأثیر منفی کوچکی بر عملکرد داشته باشد، بنابراین لاراول view:cache دستور Artisan را برای از پیش کامپایل کردن همه نماهای استفاده شده توسط برنامه شما ارائه می دهد. برای افزایش عملکرد، ممکن است بخواهید این دستور را به عنوان بخشی از فرآیند استقرار خود اجرا کنید:

php artisan view:cache

می توانید از view:clear دستور برای پاک کردن کش view استفاده کنید:

php artisan view:clear