نسخه:

مسیریابی

مسیریابی پایه

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

برای جزئیات بیشتر به مستندات مربوط به کنترلرها مراجعه کنید.