Laravel Folio: تبسيط التوجيه المعتمد على الملفات في Laravel
Laravel Folio هو موجه قوي وأنيق وبسيط بشكل لا يصدق يعتمد على الملفات لتطبيقات Laravel. تم تقديمه مع Laravel 10، يتيح لك Folio تحديد مسارات تطبيقك ببساطة عن طريق إنشاء قوالب Blade داخل دليل مخصص، وعادة ما يكون resources/views/pages. يقلل هذا النموذج بشكل كبير من الكود المتكرر المرتبط بالتوجيه التقليدي عبر web.php، مما يجعله مثاليًا للمواقع الغنية بالمحتوى، أو الصفحات المقصودة، أو عندما تفضل نهجًا أكثر سهولة يعتمد على نظام الملفات لهيكل تطبيقك.
لماذا تستخدم Laravel Folio؟ #
- البساطة: تحديد المسارات عن طريق إنشاء الملفات. لا حاجة لإدارة ملف
web.phpكبير لكل صفحة. - هيكل بديهي: هيكل URL الخاص بك يعكس مباشرة نظام ملفاتك.
- النماذج الأولية السريعة: يمكنك إنشاء صفحات جديدة بسرعة دون الحاجة إلى لمس ملفات التوجيه الخاصة بك.
- التماسك: حافظ على ارتباط وثيق بين العروض والمسارات المقابلة لها.
البدء مع Laravel Folio #
1. التثبيت #
Folio هي حزمة Laravel من الطرف الأول. يمكنك تثبيتها عبر Composer:
composer require laravel/folio
بعد التثبيت، قم بنشر إعدادات Folio وإنشاء دليل pages الافتراضي باستخدام أمر Artisan folio:install:
php artisan folio:install
سينشئ هذا الأمر دليل resources/views/pages. هذا هو المكان الذي ستوجد فيه جميع قوالب Blade التي يديرها Folio.
2. إنشاء صفحتك الأولى #
لإنشاء صفحة "من نحن" بسيطة، ما عليك سوى إنشاء ملف Blade داخل دليل pages:
touch resources/views/pages/about.blade.php
الآن، أضف بعض المحتوى إليه:
<!-- resources/views/pages/about.blade.php -->
<h1>من نحن</h1>
<p>هذه هي صفحة "من نحن".</p>
انتقل إلى /about في متصفحك، وسترى صفحتك!
وبالمثل، لصفحتك الرئيسية، قم بإنشاء resources/views/pages/index.blade.php.
3. معاملات المسار (Route Parameters) #
يدعم Folio معاملات المسار الديناميكية (dynamic route parameters)، تمامًا مثل مسارات Laravel التقليدية. يمكنك تعريفها باستخدام الأقواس المربعة [] في أسماء ملفاتك.
المعاملات الأساسية
لإنشاء صفحة تعرض منشورًا بمعرف (ID) خاص به، أنشئ ملفًا باسم [id].blade.php داخل دليل posts:
touch resources/views/pages/posts/[id].blade.php
داخل resources/views/pages/posts/[id].blade.php:
<!-- resources/views/pages/posts/[id].blade.php -->
<h1>معرف المنشور: {{ $id }}</h1>
<p>هذا هو محتوى المنشور رقم {{ $id }}.</p>
الآن، ستؤدي زيارة /posts/1 إلى عرض "معرف المنشور: 1"، وستعرض /posts/50 "معرف المنشور: 50".
ربط النماذج (Model Binding)
يتكامل Folio بسلاسة مع ربط نماذج المسار في Laravel (route model binding). إذا كان اسم المعامل الخاص بك يطابق نموذجًا، فسيحاول Folio تلقائيًا استرداد نسخة النموذج المقابلة.
لنفرض أن لديك نموذج User. أنشئ resources/views/pages/users/[User].blade.php:
touch resources/views/pages/users/[User].blade.php
داخل resources/views/pages/users/[User].blade.php:
<!-- resources/views/pages/users/[User].blade.php -->
<h1>ملف تعريف المستخدم: {{ $user->name }}</h1>
<p>البريد الإلكتروني: {{ $user->email }}</p>
الآن، ستؤدي زيارة /users/1 (بافتراض وجود مستخدم بمعرف 1) إلى حقن نسخة نموذج User تلقائيًا في قالب Blade الخاص بك. يدعم Folio ربط النماذج الضمني والمفاتيح المخصصة تمامًا مثل مسارات web.php.
4. المسارات المتداخلة (Nested Routes) #
يؤدي تنظيم مساراتك في أدلة فرعية إلى إنشاء عناوين URL متداخلة تلقائيًا.
للوحة تحكم إدارية، يمكنك إنشاء:
mkdir -p resources/views/pages/admin
touch resources/views/pages/admin/dashboard.blade.php
touch resources/views/pages/admin/settings.blade.php
الآن، سيقوم /admin/dashboard و /admin/settings بتقديم هذه الصفحات المعنية.
5. التخطيطات (Layouts) #
يتيح لك Folio تحديد تخطيطات لمجموعات من الصفحات. يمكنك تعريف ملف _layout.blade.php داخل أي دليل، وستستخدم جميع الصفحات داخل هذا الدليل وأدلته الفرعية هذا التخطيط تلقائيًا.
على سبيل المثال، لإنشاء تخطيط لجميع صفحات الإدارة:
touch resources/views/pages/admin/_layout.blade.php
داخل resources/views/pages/admin/_layout.blade.php:
<!-- resources/views/pages/admin/_layout.blade.php -->
<!DOCTYPE html>
<html lang="en">
<head>
<title>منطقة الإدارة</title>
</head>
<body>
<nav>
<a href="/admin/dashboard">لوحة التحكم</a> |
<a href="/admin/settings">الإعدادات</a>
</nav>
<div class="content">
{{ $slot }}
</div>
</body>
</html>
الآن، سيتم عرض محتوى resources/views/pages/admin/dashboard.blade.php في متغير $slot لهذا التخطيط. لست بحاجة إلى استخدام @extends أو @section.
يمكنك أيضًا استخدام تخطيط عام عن طريق وضع _layout.blade.php مباشرة في resources/views/pages.
6. البرمجيات الوسيطة (Middleware) #
يمكنك إرفاق البرمجيات الوسيطة بصفحات Folio مباشرة داخل ملف Blade باستخدام توجيه @php folio():
على سبيل المثال، لحماية صفحة إدارية:
<!-- resources/views/pages/admin/dashboard.blade.php -->
@php folio()->middleware(['auth', 'admin']) @endphp
<h1>لوحة تحكم الإدارة</h1>
<p>مرحبًا بك، {{ auth()->user()->name }}!</p>
سيطبق هذا auth وبرمجية admin الوسيطة (الافتراضية) على مسار /admin/dashboard.
الخلاصة #
يقدم Laravel Folio نهجًا منعشًا للتوجيه، خاصة للتطبيقات التي يتطابق فيها هيكل الصفحة بشكل وثيق مع هيكل URL. إنه يبسط التطوير، ويعزز قابلية القراءة، ويوفر فصلًا نظيفًا للمخاوف لصفحات الواجهة الأمامية الخاصة بك. بينما قد لا يحل محل web.php بالكامل للمسارات المعقدة لـ API أو السيناريوهات الديناميكية للغاية، إلا أنه أداة ممتازة يجب أن تكون في ترسانة Laravel الخاصة بك لبناء تطبيقات ويب أنيقة وسهلة الصيانة. جربه واستمتع بالبساطة!