بازدیدها
معرفی
البته، بازگرداندن کل رشته های اسناد 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