跟我学Laravel之路由


基本路由

应用中的大多数路都会定义在 app/routes.php 文件中。最简单的Laravel路由由URI和闭包回调函数组成。

基本 GET 路由

URL::to方法就可以满足此需求:

$url = URL::to('foo');

路由参数

'UserController@showProfile'));

为路由绑定多个过滤器

'UserController@showProfile'));

现在,你可以使用路由名称来创建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
    });
});

子域名路由

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。


« 
» 

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3