مسیریابی
- مسیریابی پایه
- پارامترهای مسیر
- فیلترهای مسیر
- مسیرهای نامگذاری شده
- گروه های مسیر
- مسیریابی زیر دامنه
- پیشوند مسیر
- اتصال مدل مسیر
- پرتاب خطاهای 404
- مسیریابی به کنترلرها
مسیریابی پایه
بیشتر مسیرهای برنامه شما در
app/routes.php
فایل تعریف می شود.
ساده ترین مسیرهای لاراول شامل یک URI و یک پاسخ تماس بسته می شود.
مسیر اصلی GET
Route::get('/', function(){ return 'Hello World';});
مسیر اصلی POST
Route::post('foo/bar', function(){ return 'Hello World';});
ثبت یک مسیر برای افعال چندگانه
Route::match(array('GET', 'POST'), '/', function(){ return 'Hello World';});
ثبت مسیری که به هر فعل HTTP پاسخ می دهد
Route::any('foo', function(){ return 'Hello World';});
اجبار یک مسیر به سرویس دهی از طریق HTTPS
Route::get('foo', array('https', function(){ return 'Must be over HTTPS';}));
اغلب، شما نیاز به ایجاد URL برای مسیرهای خود دارید، می توانید این کار را
با استفاده از
URL::to
روش زیر انجام دهید:
$url = URL::to('foo');
پارامترهای مسیر
Route::get('user/{id}', function($id){ return 'User '.$id;});
پارامترهای مسیر اختیاری
Route::get('user/{name?}', function($name = null){ return $name;});
پارامترهای مسیر اختیاری با پیشفرض
Route::get('user/{name?}', function($name = 'John'){ return $name;});
محدودیت های مسیر بیان منظم
Route::get('user/{name}', function($name){ //})->where('name', '[A-Za-z]+'); Route::get('user/{id}', function($id){ //})->where('id', '[0-9]+');
عبور آرایه از Wheres
البته، ممکن است در صورت لزوم، مجموعه ای از محدودیت ها را تصویب کنید:
Route::get('user/{id}/{name}', function($id, $name){ //})->where(array('id' => '[0-9]+', 'name' => '[a-z]+'))
تعریف الگوهای جهانی
اگر می خواهید یک پارامتر مسیر همیشه توسط یک عبارت منظم محدود شود، می
توانید از
pattern
روش استفاده کنید:
Route::pattern('id', '[0-9]+'); Route::get('user/{id}', function($id){ // Only called if {id} is numeric.});
دسترسی به مقدار پارامتر مسیر
اگر نیاز به دسترسی به مقدار پارامتر مسیر در خارج از مسیر دارید، می توانید
از
Route::input
روش زیر استفاده کنید:
Route::filter('foo', function(){ if (Route::input('id') == 1) { // }});
فیلترهای مسیر
فیلترهای مسیر راهی مناسب برای محدود کردن دسترسی به یک مسیر مشخص میکنند
که برای ایجاد مناطقی از سایت شما که نیاز به احراز هویت دارند مفید است.
چندین فیلتر در چارچوب لاراول گنجانده شده است، از جمله
auth
فیلتر،
auth.basic
فیلتر،
guest
فیلتر و
csrf
فیلتر.
اینها در فایل قرار دارند
app/filters.php
.
توجه: فیلترها وقتی محیط برنامه غیرفعال می شوند
testing
.
تعریف فیلتر مسیر
Route::filter('old', function(){ if (Input::get('age') < 200) { return Redirect::to('home'); }});
اگر فیلتر پاسخی را برگرداند، آن پاسخ به عنوان پاسخ به درخواست در نظر
گرفته می شود و مسیر اجرا نمی شود.
هر گونه
after
فیلتر در مسیر نیز لغو می شود.
وصل کردن یک فیلتر به یک مسیر
Route::get('user', array('before' => 'old', function(){ return 'You are over 200 years old!';}));
اکشن اتصال یک فیلتر به یک کنترلر
Route::get('user', array('before' => 'old', 'uses' => 'UserController@showProfile'));
اتصال چندین فیلتر به یک مسیر
Route::get('user', array('before' => 'auth|old', function(){ return 'You are authenticated and over 200 years old!';}));
اتصال چندین فیلتر از طریق آرایه
Route::get('user', array('before' => array('auth', 'old'), function(){ return 'You are authenticated and over 200 years old!';}));
تعیین پارامترهای فیلتر
Route::filter('age', function($route, $request, $value){ //}); Route::get('user', array('before' => 'age:200', function(){ return 'Hello World';}));
پس از دریافت فیلترها
$response
به عنوان آرگومان سوم که به فیلتر ارسال می شود:
Route::filter('log', function($route, $request, $response){ //});
فیلترهای مبتنی بر الگو
همچنین میتوانید تعیین کنید که یک فیلتر برای کل مجموعه مسیرها بر اساس URI آنها اعمال شود.
Route::filter('admin', function(){ //}); Route::when('admin/*', 'admin');
در مثال بالا،
admin
فیلتر برای همه مسیرهایی که با شروع شروع می شوند اعمال می شود
admin/
.
ستاره به عنوان یک علامت عام استفاده می شود و با هر ترکیبی از کاراکترها
مطابقت دارد.
همچنین میتوانید فیلترهای الگو را با افعال HTTP محدود کنید:
Route::when('admin/*', 'admin', array('post'));
کلاس های فیلتر
برای فیلتر کردن پیشرفته، ممکن است بخواهید از یک کلاس به جای Closure استفاده کنید. از آنجایی که کلاس های فیلتر خارج از برنامه IoC Container حل می شوند ، می توانید از تزریق وابستگی در این فیلترها برای آزمایش پذیری بیشتر استفاده کنید.
ثبت فیلتر مبتنی بر کلاس
Route::filter('foo', 'FooFilter');
به طور پیش فرض
filter
متد روی
FooFilter
کلاس فراخوانی می شود:
class FooFilter { public function filter() { // Filter logic... } }
اگر مایل به استفاده از روش نیستید
filter
، فقط روش دیگری را مشخص کنید:
Route::filter('foo', 'FooFilter@foo');
مسیرهای نامگذاری شده
مسیرهای نامگذاری شده ارجاع به مسیرها را هنگام ایجاد تغییر مسیر یا URL راحت تر می کند. می توانید نامی برای مسیری مانند این تعیین کنید:
Route::get('user/profile', array('as' => 'profile', function(){ //}));
همچنین می توانید نام مسیرها را برای اقدامات کنترلر مشخص کنید:
Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile'));
اکنون، میتوانید از نام مسیر هنگام ایجاد URL یا تغییر مسیر استفاده کنید:
$url = URL::route('profile'); $redirect = Redirect::route('profile');
می توانید به نام مسیری که در حال اجرا است از طریق
currentRouteName
روش زیر دسترسی داشته باشید:
$name = Route::currentRouteName();
گروه های مسیر
گاهی اوقات ممکن است لازم باشد فیلترهایی را برای گروهی از مسیرها اعمال کنید. به جای تعیین فیلتر در هر مسیر، می توانید از یک گروه مسیر استفاده کنید:
Route::group(array('before' => 'auth'), function(){ Route::get('/', function() { // Has Auth Filter }); Route::get('user/profile', function() { // Has Auth Filter });});
همچنین میتوانید از
namespace
پارامتر درون آرایه خود
group
برای تعیین تمام کنترلکنندههای درون آن گروه بهعنوان یک فضای نام خاص
استفاده کنید:
Route::group(array('namespace' => 'Admin'), function(){ //});
مسیریابی زیر دامنه
مسیرهای لاراول همچنین قادر به مدیریت زیر دامنه های wildcard هستند و پارامترهای wildcard شما را از دامنه ارسال می کنند:
ثبت مسیرهای زیر دامنه
Route::group(array('domain' => '{account}.myapp.com'), function(){ Route::get('user/{id}', function($account, $id) { // }); });
پیشوند مسیر
گروهی از مسیرها ممکن است با استفاده از
prefix
گزینه موجود در آرایه ویژگی های یک گروه پیشوند شوند:
Route::group(array('prefix' => 'admin'), function(){ Route::get('user', function() { // }); });
اتصال مدل مسیر
Model binding یک راه راحت برای تزریق نمونه های مدل به مسیرهای شما فراهم
می کند.
به عنوان مثال، به جای تزریق یک شناسه کاربر، می توانید کل نمونه مدل User
را که با شناسه داده شده مطابقت دارد، تزریق کنید.
ابتدا از
Route::model
روش برای تعیین مدلی که باید برای یک پارامتر معین استفاده شود استفاده
کنید:
اتصال یک پارامتر به یک مدل
Route::model('user', 'User');
سپس مسیری را تعریف کنید که حاوی
{user}
پارامتر باشد:
Route::get('profile/{user}', function(User $user){ //});
{user}
از آنجایی که پارامتر را به مدل
متصل کرده ایم
User
، یک
User
نمونه به مسیر تزریق می شود.
بنابراین، برای مثال، یک درخواست به
نمونه ای را که دارای شناسه 1 است،
profile/1
تزریق می کند .
User
توجه: اگر نمونه ای از مدل منطبق در پایگاه داده یافت نشد، خطای 404 پرتاب می شود.
اگر می خواهید رفتار "یافت نشد" خود را مشخص کنید، می توانید یک Closure را
به عنوان آرگومان سوم به متد ارسال کنید
model
:
Route::model('user', 'User', function(){ throw new NotFoundHttpException;});
گاهی اوقات ممکن است بخواهید از حل کننده خود برای پارامترهای مسیر استفاده
کنید.
به سادگی از
Route::bind
روش استفاده کنید:
Route::bind('user', function($value, $route){ return User::where('name', $value)->first();});
پرتاب خطاهای 404
دو راه برای راه اندازی دستی خطای 404 از یک مسیر وجود دارد.
ابتدا می توانید از
App::abort
روش زیر استفاده کنید:
App::abort(404);
دوم، شما ممکن است یک نمونه از
Symfony\Component\HttpKernel\Exception\NotFoundHttpException
.
اطلاعات بیشتر در مورد رسیدگی به استثناهای 404 و استفاده از پاسخ های سفارشی برای این خطاها را می توانید در بخش خطاهای مستندات بیابید .
مسیریابی به کنترلرها
لاراول به شما این امکان را می دهد که نه تنها به Closures، بلکه به کلاس های کنترلر نیز مسیریابی کنید و حتی اجازه ایجاد کنترل کننده های منابع را می دهد .
برای جزئیات بیشتر به مستندات مربوط به کنترلرها مراجعه کنید.