跟我学Laravel之路由
应用中的大多数路都会定义在 app/routes.php 文件中。最简单的Laravel路由由URI和闭包回调函数组成。
基本 GET 路由
URL::to方法就可以满足此需求:
$url = URL::to
基本路由
应用中的大多数路都会定义在 app/routes.php 文件中。最简单的Laravel路由由URI和闭包回调函数组成。
基本 GET 路由
$url = URL::to('foo');
路由参数
为路由绑定多个过滤器
现在,你可以使用路由名称来创建URL和重定向:
$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
});
});
子域名路由
Laravel中的路由功能还支持通配符子域名,你可以在域名中指定通配符参数:
注册子域名路由
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()
{
//
});
});
路由与模型绑定
模型绑定,为在路由中注入模型实例提供了便捷的途径。例如,你可以向路由中注入匹配用户ID的整个模型实例,而不是仅仅注入用户ID。首先,使用 Route::model 方法指定要被注入的模型:
将参一个模型
Route::model('user', 'User');
然后,定义一个包含{user}参数的路由:
Route::get('profile/{user}', function(User $user)
{
//
});
由于我们已将{user}参数绑定到了User模型,因此可以向路由中注入一个User实例。例如,对profile/1的访问将会把ID为1的User实例注入到路由中。
注意: 如果在数据库中无法匹配到对应的模型实例,404错误将被抛出。
如果你希望自定义"not found"行为,可以通过传递一个闭包函数作为 model 方法的第三个参数:
Route::model('user', 'User', function()
{
throw new NotFoundException;
});
如果你想自己实现路由参数的解析,只需使用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异常以及错误发生时自定义response的信息可以查看错误文档。
控制器路由
Laravel不光提供了利用闭包函数处理路由的功能,还可以路由到控制器,甚至支持创建 resource controllers。