نسخه:

لاراول فولیو

معرفی

Laravel Folio یک روتر قدرتمند مبتنی بر صفحه است که برای ساده کردن مسیریابی در برنامه های لاراول طراحی شده است. با Laravel Folio، ایجاد یک مسیر به اندازه ایجاد یک قالب Blade در دایرکتوری برنامه شما آسان می شود resources/views/pages .

به عنوان مثال، برای ایجاد صفحه ای که در /greeting URL قابل دسترسی است، فقط یک greeting.blade.php فایل در فهرست برنامه خود ایجاد کنید resources/views/pages :

<div>
Hello World
</div>

نصب و راه اندازی

برای شروع، Folio را با استفاده از مدیریت بسته Composer در پروژه خود نصب کنید:

composer require laravel/folio

پس از نصب Folio، می توانید folio:install دستور Artisan را اجرا کنید که ارائه دهنده خدمات Folio را در برنامه شما نصب می کند. این ارائه دهنده خدمات دایرکتوری را که در آن Folio مسیرها / صفحات را جستجو می کند، ثبت می کند:

php artisan folio:install

مسیرهای صفحه / URI ها

به طور پیش‌فرض، Folio صفحاتی را از فهرست برنامه شما ارائه می‌کند resources/views/pages ، اما می‌توانید این فهرست‌ها را در boot روش ارائه‌دهنده خدمات Folio خود سفارشی کنید.

برای مثال، گاهی اوقات ممکن است تعیین چندین مسیر Folio در یک برنامه Laravel راحت باشد. ممکن است بخواهید یک دایرکتوری جداگانه از صفحات Folio برای منطقه "admin" برنامه خود داشته باشید، در حالی که از فهرست دیگری برای بقیه صفحات برنامه خود استفاده می کنید.

شما می توانید این کار را با استفاده از روش های Folio::path و انجام دهید Folio::uri . این path روش دایرکتوری را ثبت می‌کند که Folio هنگام مسیریابی درخواست‌های HTTP ورودی، صفحات را اسکن می‌کند، در حالی که این uri روش، "URI پایه" را برای آن فهرست صفحات مشخص می‌کند:

use Laravel\Folio\Folio;
 
Folio::path(resource_path('views/pages/guest'))->uri('/');
 
Folio::path(resource_path('views/pages/admin'))
->uri('/admin')
->middleware([
'*' => [
'auth',
'verified',
 
// ...
],
]);

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

همچنین می توانید به صفحاتی بر اساس زیر دامنه درخواست ورودی مسیریابی کنید. برای مثال، ممکن است بخواهید درخواست‌ها را admin.example.com به دایرکتوری صفحه‌ای متفاوت از بقیه صفحات Folio هدایت کنید. می توانید این کار را با فراخوانی domain متد پس از فراخوانی Folio::path متد انجام دهید:

use Laravel\Folio\Folio;
 
Folio::domain('admin.example.com')
->path(resource_path('views/pages/admin'));

این domain روش همچنین به شما اجازه می دهد تا قسمت هایی از دامنه یا زیر دامنه را به عنوان پارامتر ثبت کنید. این پارامترها به قالب صفحه شما تزریق می شود:

use Laravel\Folio\Folio;
 
Folio::domain('{account}.example.com')
->path(resource_path('views/pages/admin'));

ایجاد مسیرها

می‌توانید با قرار دادن یک الگوی Blade در هر یک از فهرست‌های نصب‌شده در Folio، یک مسیر Folio ایجاد کنید. به طور پیش‌فرض، Folio resources/views/pages دایرکتوری را نصب می‌کند، اما می‌توانید این فهرست‌ها را به boot روش ارائه‌دهنده خدمات Folio خود سفارشی کنید.

هنگامی که یک الگوی Blade در یک فهرست نصب شده Folio قرار گرفت، می توانید بلافاصله از طریق مرورگر خود به آن دسترسی داشته باشید. به عنوان مثال، صفحه ای که در آن قرار داده شده است pages/schedule.blade.php ممکن است در مرورگر شما در http://example.com/schedule .

برای مشاهده سریع لیستی از تمام صفحات / مسیرهای Folio خود، می توانید folio:list دستور Artisan را فراخوانی کنید:

php artisan folio:list

مسیرهای تو در تو

می توانید با ایجاد یک یا چند دایرکتوری در یکی از دایرکتوری های Folio یک مسیر تودرتو ایجاد کنید. به عنوان مثال، برای ایجاد صفحه ای که از طریق قابل دسترسی است /user/profile ، یک profile.blade.php الگو در pages/user دایرکتوری ایجاد کنید:

php artisan make:folio user/profile
 
# pages/user/profile.blade.php → /user/profile

مسیرهای شاخص

گاهی اوقات، ممکن است بخواهید یک صفحه معین را به عنوان "شاخص" یک فهرست انتخاب کنید. با قرار دادن یک index.blade.php الگو در یک پوشه Folio، هر درخواستی به ریشه آن دایرکتوری به آن صفحه هدایت می شود:

php artisan make:folio index
# pages/index.blade.php → /
 
php artisan make:folio users/index
# pages/users/index.blade.php → /users

پارامترهای مسیر

اغلب، شما نیاز دارید که بخش هایی از URL درخواست دریافتی را به صفحه خود تزریق کنید تا بتوانید با آنها تعامل داشته باشید. برای مثال، ممکن است لازم باشد به «شناسه» کاربری که نمایه‌اش نمایش داده می‌شود، دسترسی داشته باشید. برای انجام این کار، می‌توانید بخشی از نام فایل صفحه را در براکت‌های مربع کپسوله کنید:

php artisan make:folio "users/[id]"
 
# pages/users/[id].blade.php → /users/1

بخش های گرفته شده را می توان به عنوان متغیرهایی در قالب Blade خود مشاهده کرد:

<div>
User {{ $id }}
</div>

برای گرفتن چندین بخش، می توانید قسمت محصور شده را با سه نقطه پیشوند قرار دهید ... :

php artisan make:folio "users/[...ids]"
 
# pages/users/[...ids].blade.php → /users/1/2/3

هنگام گرفتن چندین بخش، بخش های گرفته شده به عنوان یک آرایه به صفحه تزریق می شوند:

<ul>
@foreach ($ids as $id)
<li>User {{ $id }}</li>
@endforeach
</ul>

اتصال مدل مسیر

اگر قسمتی از نام فایل قالب صفحه شما با یکی از مدل های Eloquent برنامه شما مطابقت داشته باشد، Folio به طور خودکار از قابلیت های اتصال مدل مسیر لاراول استفاده می کند و سعی می کند نمونه مدل حل شده را به صفحه شما تزریق کند:

php artisan make:folio "users/[User]"
 
# pages/users/[User].blade.php → /users/1

مدل‌های ضبط‌شده را می‌توان به‌عنوان متغیرهایی در قالب Blade خود مشاهده کرد. نام متغیر مدل به "camel case" تبدیل می شود:

<div>
User {{ $user->id }}
</div>

سفارشی کردن کلید

گاهی اوقات ممکن است بخواهید مدل های محدود Eloquent را با استفاده از ستونی غیر از id . برای انجام این کار، می توانید ستون را در نام فایل صفحه مشخص کنید. به عنوان مثال، صفحه ای با نام فایل [Post:slug].blade.php سعی می کند مدل محدود شده را از طریق slug ستون به جای id ستون حل کند.

در ویندوز، برای - جدا کردن نام مدل از کلید: [Post-slug].blade.php .

مکان مدل

به طور پیش فرض، Folio مدل شما را در app/Models فهرست برنامه شما جستجو می کند. با این حال، در صورت نیاز، می توانید نام کلاس مدل کاملاً واجد شرایط را در نام فایل قالب خود مشخص کنید:

php artisan make:folio "users/[.App.Models.User]"
 
# pages/users/[.App.Models.User].blade.php → /users/1

مدل های نرم حذف شده

به‌طور پیش‌فرض، مدل‌هایی که به‌صورت نرم‌افزاری حذف شده‌اند، هنگام حل و فصل پیوندهای مدل ضمنی بازیابی نمی‌شوند. با این حال، در صورت تمایل، می‌توانید به Folio دستور دهید تا مدل‌های حذف شده نرم‌افزار را با فراخوانی withTrashed تابع در قالب صفحه بازیابی کند:

<?php
 
use function Laravel\Folio\{withTrashed};
 
withTrashed();
 
?>
 
<div>
User {{ $user->id }}
</div>

رندر هوک

به طور پیش فرض، Folio محتوای قالب Blade صفحه را به عنوان پاسخ به درخواست دریافتی برمی گرداند. با این حال، می توانید پاسخ را با فراخوانی render تابع در قالب صفحه سفارشی کنید.

این render تابع یک بسته را می‌پذیرد که نمونه‌ای را که توسط Folio ارائه می‌شود دریافت می‌کند View و به شما امکان می‌دهد داده‌های اضافی را به نما اضافه کنید یا کل پاسخ را سفارشی کنید. علاوه بر دریافت View نمونه، هر پارامتر مسیر اضافی یا اتصال مدل نیز به بسته ارائه می شود render :

<?php
 
use App\Models\Post;
use Illuminate\Support\Facades\Auth;
use Illuminate\View\View;
 
use function Laravel\Folio\render;
 
render(function (View $view, Post $post) {
if (! Auth::user()->can('view', $post)) {
return response('Unauthorized', 403);
}
 
return $view->with('photos', $post->author->photos);
}); ?>
 
<div>
{{ $post->content }}
</div>
 
<div>
This author has also taken {{ count($photos) }} photos.
</div>

مسیرهای نامگذاری شده

می‌توانید با استفاده از تابع، نامی برای مسیر یک صفحه مشخص کنید name :

<?php
 
use function Laravel\Folio\name;
 
name('users.index');

درست مانند مسیرهای نام‌گذاری شده لاراول، می‌توانید از این route تابع برای ایجاد URL به صفحات Folio که یک نام به آنها اختصاص داده شده است استفاده کنید:

<a href="{{ route('users.index') }}">
All Users
</a>

اگر صفحه دارای پارامترهایی است، می توانید به سادگی مقادیر آنها را به route تابع ارسال کنید:

route('users.show', ['user' => $user]);

میان افزار

می توانید با فراخوانی middleware تابع در قالب صفحه، میان افزار را به یک صفحه خاص اعمال کنید:

<?php
 
use function Laravel\Folio\{middleware};
 
middleware(['auth', 'verified']);
 
?>
 
<div>
Dashboard
</div>

یا برای تخصیص میان‌افزار به گروهی از صفحات، می‌توانید middleware پس از فراخوانی متد، متد را زنجیره‌ای کنید Folio::path .

برای مشخص کردن صفحاتی که میان‌افزار باید اعمال شود، ممکن است آرایه میان‌افزار با استفاده از الگوهای URL متناظر صفحاتی که باید روی آن‌ها اعمال شوند، کلید زده شود. این * کاراکتر ممکن است به عنوان یک کاراکتر عام استفاده شود:

use Laravel\Folio\Folio;
 
Folio::path(resource_path('views/pages'))->middleware([
'admin/*' => [
'auth',
'verified',
 
// ...
],
]);

برای تعریف میان‌افزارهای درون خطی و ناشناس، می‌توانید بسته‌هایی را در آرایه میان‌افزار قرار دهید:

use Closure;
use Illuminate\Http\Request;
use Laravel\Folio\Folio;
 
Folio::path(resource_path('views/pages'))->middleware([
'admin/*' => [
'auth',
'verified',
 
function (Request $request, Closure $next) {
// ...
 
return $next($request);
},
],
]);

حافظه پنهان مسیر

هنگام استفاده از Folio، همیشه باید از قابلیت‌های کش مسیر لاراول استفاده کنید . Folio به route:cache دستور Artisan گوش می دهد تا مطمئن شود که تعاریف صفحه Folio و نام مسیرها برای حداکثر کارایی به درستی در حافظه پنهان ذخیره می شوند.