跟我学Laravel之路由

澳门新葡亰赌995577 1

Laravel框架在PHP开发中使用十分广泛,本文主要对Laravel框架中的路由设置作详细的介绍,Laravel的路由配置非常灵活,如何设置好路由对PHP应用来说也是相当关键的。

基本路由

澳门新葡亰赌995577 1

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

基本路由

基本 GET 路由

您的应用程序的绝大多数路由将在 app/routes.php 文件中定义。Laravel
中最简单的路由由一个 URI 和一个闭包调用组成。

复制代码 代码如下:
Route::get(‘/’, function()
{
    return ‘Hello World’;
});

基本 GET 路由

基本 POST 路由

Route::get('/', function()
{
return 'Hello World';
});

复制代码 代码如下:
Route::post(‘foo/bar’, function()
{
    return ‘Hello World’;
});

基本 POST 路由

注册一个可以响应任何HTTP动作的路由

Route::post('foo/bar', function()
{
return 'Hello World';
});

复制代码 代码如下:
Route::any(‘foo’, function()
{
    return ‘Hello World’;
});

注册一个路由以响应所有 HTTP 方法

仅支持HTTPS的路由

Route::any('foo', function()
{
   return 'Hello World';
});

复制代码 代码如下:
Route::get(‘foo’, array(‘https’, function()
{
    return ‘Must be over HTTPS’;
}));

强制一个路由必须通过 HTTPS 访问

实际开发中经常需要根据路由生成
URL,URL::to方法就可以满足此需求:

Route::get('foo', array('https', function()
{
    return 'Must be over HTTPS';
}));

$url =
URL::to(‘foo’);

经常您需要根据路由产生 URLs,您可以通过使用 URL::to 方法:

路由参数

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

复制代码 代码如下:
Route::get(‘user/{id}’, function($id)
{
    return ‘User ‘.$id;
});

路由参数

可选路由参数

Route::get('user/{id}', function($id)
{
return 'User '.$id;
});

复制代码 代码如下:
Route::get(‘user/{name?}’, function($name = null)
{
    return $name;
});

可选的路由参数

带有默认值的可选路由参数

Route::get('user/{name?}', function($name = null)
{
return $name;
});

复制代码 代码如下:
Route::get(‘user/{name?}’, function($name = ‘John’)
{
    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/{name}', function($name)
{
//
})
->where('name', '[A-Za-z]+');
Route::get('user/{id}', function($id)
{
//
})
->where('id', '[0-9]+');

传递参数限定的数组

路由过滤器

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

路由过滤器提供了一种限制访问指定路由的简单的方法,这在您需要为您的站点创建需要认证区域的时候非常有用。Laravel
框架中包含了一些路由过滤器,比如 auth 过滤器、auth.basic 过滤器、guest
过滤器、以及 csrf 过滤器。它们被存放在 app/filters.php 文件中。

复制代码 代码如下:
Route::get(‘user/{id}/{name}’, function($id, $name)
{
    //
})
->where(array(‘id’ => ‘[0-9]+’, ‘name’ => ‘[a-z]+’))

定义一个路由过滤器

定义全局模式

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

如果希望在全局范围用指定正则表达式限定路由参数,可以使用 pattern 方法:

如果一个响应从一个路由过滤器中返回,这个响应即被认为是这个请求的响应,路由将不被执行,任何关于这个路由的
after 过滤器也将被取消执行。

复制代码 代码如下:
Route::pattern(‘id’, ‘[0-9]+’);

为一个路由指定一个路由过滤器

Route::get(‘user/{id}’, function($id)
{
    // Only called if {id} is numeric.
});

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

访问路由参数

为一个路由指定多个路由过滤器

如果想在路由范围外访问路由参数,可以使用 Route::input 方法:

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

复制代码 代码如下:
Route::filter(‘foo’, function()
{
    if (Route::input(‘id’) == 1)
    {
        //
    }
});

指定路由过滤器参数

路由过滤器

Route::filter('age', function($route, $request, $value)
{
//
});
Route::get('user', array('before' => 'age:200', function()
{
return 'Hello World';
}));

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

当路由过滤器接收到作为第三个参数的响应 $response:

定义一个路由过滤器

Route::filter('log', function($route, $request, $response, $value)
{
//
});

复制代码 代码如下:
Route::filter(‘old’, function()
{
    if (Input::get(‘age’) < 200)
    {
        return Redirect::to(‘home’);
    }
澳门新葡亰赌995577,});

基本路由过滤器的模式

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

您可能希望根据 URI 为一组路由指定过滤器。

为路由绑定过滤器

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

复制代码 代码如下:
Route::get(‘user’, array(‘before’ => ‘old’, function()
{
    return ‘You are over 200 years old!’;
}));

在上面的例子中,admin 过滤器将应用带所有以 admin/
开头的路由。星号作为一个通配符,将适配到所有字符的组合。

将过滤器绑定为控制器Action

您也可以通过指定 HTTP 方法约束模式过滤器:

复制代码 代码如下:
Route::get(‘user’, array(‘before’ => ‘old’, ‘uses’ =>
'UserController@showProfile'));

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

为路由绑定多个过滤器

过滤器类

复制代码 代码如下:
Route::get(‘user’, array(‘before’ => ‘auth|old’, function()
{
    return ‘You are authenticated and over 200 years old!’;
}));

对于高级的过滤器,您可以使用一个类代替闭包函数。因为过滤器类是位于应用程序之外的
IoC 容器,您能够在过滤器中使用依赖注入,更易于测试。

指定过滤器参数

定义一个过滤器类

复制代码 代码如下:
Route::filter(‘age’, function($route, $request, $value)
{
    //
});

class FooFilter {
public function filter()
{
// Filter logic...
}
}

Route::get(‘user’, array(‘before’ => ‘age:200’, function()
{
    return ‘Hello World’;
}));

注册一个基于类的过滤器

所有其后的过滤器将接收到 $response作为第三个参数:

Route::filter('foo', 'FooFilter');

复制代码 代码如下:
Route::filter(‘log’, function($route, $request, $response, $value)
{
    //
});

命名路由

基于模式的过滤器

命名路由在更易于在生成跳转或 URLs
时指定路由。您可以像这样为路由指定一个名字:

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

Route::get('user/profile', array('as' => 'profile', function()
{
//
}));

复制代码 代码如下:
Route::filter(‘admin’, function()
{
    //
});

您也可以为控制器的方法指定路由名字:

Route::when(‘admin/*’, ‘admin’);

Route::get('user/profile', array('as' => 'profile', 'uses' => 
'UserController@showProfile'));

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

现在您在生成 URLs 或跳转的时候使用路由的名字:

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图