跟我学Laravel之路由

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

基本 GET 路由

复制代码 代码如下:


Route::get('https://www.jb51.net/', function()
{
    return 'Hello World';
});

基本 POST 路由

复制代码 代码如下:


Route::post('foo/bar', 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]+');

传递参数限定的数组

当然,必要的时候你还可以传递一个包含参数限定的数组作为参数:

复制代码 代码如下:


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)
    {
        //
    }
});

路由过滤器

路由过滤器提供了非常方便的方法来限制对应用程序中某些功能访问,例如对于需要验证才能访问的功能就非常有用。Laravel框架自身已经提供了一些过滤器,包括 auth过滤器、auth.basic过滤器、guest过滤器以及csrf过滤器。这些过滤器都定义在app/filter.php文件中。

定义一个路由过滤器

复制代码 代码如下:


Route::filter('old', function()
{
    if (Input::get('age') < 200)
    {
        return Redirect::to('home');
    }
});

如果从路由过滤器中返回了一个response,那么该response将被认为对应的是此次request,路由将不会被执行,并且,此路由中所有定义在此过滤器之后的代码也都不会被执行。

为路由绑定过滤器

复制代码 代码如下:


Route::get('user', array('before' => 'old', function()
{
    return 'You are over 200 years old!';
}));

将过滤器绑定为控制器Action

复制代码 代码如下:


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::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, $value)
{
    //
});

基于模式的过滤器

你也可以指针对URI为一组路由指定过滤器。

复制代码 代码如下:


Route::filter('admin', function()
{
    //
});

Route::when('admin/*', 'admin');

上述案例中,admin过滤器将会应用到所有以admin/开头的路由中。星号是通配符,将会匹配任意多个字符的组合。

还可以针对HTTP动作限定模式过滤器:

复制代码 代码如下:


Route::when('admin/*', 'admin', array('post'));

过滤器类

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/a22ee0bcd49396161871edb1f5af83f9.html