Route Property Collector
Route Property Collector سیستمی برای جمعآوری و مدیریت متادیتای Route ها در پروژه است.
با استفاده از این سیستم میتوان اطلاعاتی مانند:
- عنوان صفحه
- نمایش در سایدبار
- آیکون
- Badge
- سطح دسترسی
- روابط والد–فرزند
را مستقیماً در تعریف Route مشخص کرد و سپس بهصورت ساختاریافته در پنل استفاده نمود.
این سیستم را با دو لایه ببینید؛ همین دو نکته کلیدِ فهمِ کلِ صفحه است:
- متادیتای هر Route — روی تکتکِ Route ها با ماکروهایی مثل
->title()،->icon()،->showInSidebar()گذاشته میشود. - درختِ خودکار — سیستم از روی نامِ (
name) Route ها یک درختِ «دستهبندی ← زیردسته ← آیتم» میسازد. مثلاً نامِadmin.users.indexیعنی: دستهیadmin.usersو آیتمِindex.
پس نقطه (.) در نامِ Route = یک سطح در درخت. هر جای این صفحه (بهویژه بخشِ منو) گیج شدید، به همین قانون برگردید.
قابلیتها
جمعآوری خودکار متادیتا
متادیتاهای تعریفشده در Route ها بهصورت خودکار جمعآوری و سازماندهی میشوند.
پشتیبانی از کش
برای بهبود کارایی، اطلاعات Route ها و Breadcrumb ها میتوانند کش شوند.
م نابع چندگانه
متادیتاها میتوانند از دو منبع خوانده شوند:
localdatabase
تولید خودکار Breadcrumb
بر اساس نام Route ها و روابط والد–فرزند، ساختار Breadcrumb بهصورت خودکار ساخته میشود.
ماکروهای Route
سیستم Route Property مجموعهای از ماکروها برای تعریف متادیتای Route ارائه میدهد.
عنوان صفحه
جهت استفاده در Breadcrumb و Sidebar و قسمت های مورد نیاز
Route::get('/users', [UserController::class, 'index'])
->name('admin.users.index')
->title('مدیریت کاربران');
نمایش در سایدبار
Route::get('/users', [UserController::class, 'index'])
->name('admin.users.index')
->showInSidebar();
آیکون
جهت تعریف آیکون موجود در سایدبار
Route::get('/users', [UserController::class, 'index'])
->name('admin.users.index')
->icon('fa-users');
Badge
نمایش Badge در Sidebar (اگر null باشد، نمایش داده نمی شود)
->badge(10, 'danger')
->badge(function () {
return User::count();
}, 'primary')
سطح دسترسی
بررسی دسترسی کاربر، هنگام استفاده
->permission('user.view')
Visibility
وضعیت نمایش در Sidebar
->visibility(false)
->visibility(function ($user) {
return $user->isAdmin();
})
مرتبسازی (Sort)
برای تعیین ترتیب نمایش آیتمها در Sidebar میتوانید از ماکروی sort استفاده کنید.
عدد کمتر یعنی نمایش زودتر.
Route::get('/users', [UserController::class, 'index'])
->name('admin.users.index')
->title('مدیریت کاربران')
->showInSidebar()
->sort(10);
MenuGroup::make()
->name('admin.customer')
->title('مشتریان')
->sort(20)
->subMenu([
MenuSubgroup::make()
->name('admin.customer.wallet')
->title('کیف پول')
->sort(5),
]);
Route های الحاقی
برای مرتبط کردن چند Route به زیر مجموعه یک Route اصلی استفاده میشود.
->appendRoutes([
'admin.users.create',
'admin.users.edit',
])
Route والد
برای عملکرد Breadcrumb و Sidebar و مشخص کردن زیرمجموعه هر Route
->parentRoute('admin.users.index')
عدم ایندکس شدن
با اعمال این ماکرو، اگر Source بر روی Database تنظیم شده باشد، در نظر گرفته نمی شود
->skipIndexing()
بدون بررسی دسترسی
در صورت استفاده، در سیستم کنترل دسترسی در نظر گرفته نمی شود و همه کاربران به آن دسترسی خواهند داشت
->withoutPermission()
استفاده از Route Property Collector
دریافت Collector
$collector = routePropertyCollector();