jasonlewis/enhanced-router

Enhanced Router 是 Laravel 4 路由的扩展,提供了一些增强功能。

v1.0.3 2013-08-02 00:58 UTC

This package is auto-updated.

Last update: 2024-08-24 12:53:26 UTC


README

Enhanced Router 是 Laravel 4 路由的扩展,提供了一些增强功能。

Build Status

安装

jasonlewis/enhanced-router 添加到 composer.json

"jasonlewis/enhanced-router": "1.0.*"

运行 composer update 以拉取 Enhanced Router 的最新版本。现在打开 app/config/app.php 并将服务提供者添加到您的 providers 数组中。

'providers' => array(
    'JasonLewis\EnhancedRouter\EnhancedRouterServiceProvider'
)

就这些。现在您的路由有了增强功能。

特性

  • 在路由分组前缀和域设置 where 要求。
  • 使用 beforeafter 方法将过滤器应用于整个路由分组。
  • 将过滤器设置为在 HTTP 请求方法或 HTTP 请求方法数组上运行。

使用 Enhanced Router

一旦您安装了该软件包并将服务提供者添加到您的 providers 键中,您就可以立即开始使用这些功能。

路由分组前缀

使用 Laravel 4 路由,无法对前缀设置要求。这意味着前缀本身是硬编码的。在实际应用中有许多场景,使用变量前缀非常有用。

假设您正在构建一个具有本地化支持的应用程序,并且目前正使用本地化设置所有路由的前缀。

Route::get('{locale}/about', function($locale)
{

})->where('locale', '(en|fr)');

Route::get('{locale}', function($locale)
{
    return 'Homepage';
})->where('locale', '(en|fr)');

对于小型应用程序,这可能足够。但一旦您的应用程序变得相当大,这可能会变得有点麻烦。当您需要添加另一种语言时,您需要遍历所有路由并添加语言。

使用 Enhanced Router,您可以在分组上设置要求本身。这意味着您只需定义一次要求,将来添加语言就不会那么痛苦。

Route::group(array('prefix' => '{locale}'), function()
{
    Route::get('about', function($locale)
    {
    
    });
    
    Route::get('/', function($locale)
    {
        return 'Homepage';
    });
})->where('locale', '(en|fr)');

参数

需要注意的是,本地化实际上作为 参数 分配给每个路由。参数还分配给组内的每个控制器的方法。当您的路由需要自己的参数时,它将在前缀参数之后给出。

子域路由

使用 Laravel 4 的路由分组,您可以指定分组响应的域。当您想路由到子域时,这特别有用。目前,您只能路由到单个子域或所有子域。

Route::group(array('domain' => 'example.laravel.dev'), function()
{

});

Route::group(array('domain' => '{user}.laravel.dev'), function()
{

});

第一个分组将匹配 example.laravel.dev,第二个将匹配任何子域。使用与前缀相同的语法,您也可以设置子域的要求。

Route::group(array('domain' => '{user}.laravel.dev'), function()
{

})->where('user', '(jason|shawn)');

现在该分组将仅匹配子域 jason.laravel.devshawn.laravel.dev

过滤器

路由分组

现在可以使用您可能从路由中熟悉的流畅语法将过滤器应用于分组。这里需要注意的是,您仍然需要将数组作为第一个参数提供给分组。

Route::group(array(), function()
{
    
})->before('auth');

现在,组中的所有过滤器都将应用 auth 过滤器。当您有应用了过滤器的嵌套分组时,最外层的过滤器首先应用,因为它们实际上是首先定义的。

Route::group(array(), function()
{
    Route::group(array(), function()
    {
    
    })->before('csrf');
})->before('auth');

上面的示例将首先触发 auth 过滤器,然后如果匹配的路由在该组内,将转到 csrf 过滤器。

由于 Laravel 4 路由中的类型提示,很难从第一个参数中移除空数组。如果您没有使用前缀或子域路由,则可以使用新的 bunch 方法。

Route::bunch(function()
{

})->before('auth');

此方法与 group 相同,除了您不需要将数组作为第一个参数传递。

HTTP 请求方法

增强型路由器允许您对特定HTTP动词的所有路由应用过滤器。考虑一个所有POST请求都需要csrf过滤器的应用程序。

Route::on('post', 'csrf');

或者您可以使用动词数组。

Route::on(['post', 'put'], 'csrf');

您还可以使用要应用的过滤器数组。

Route::on(['post', 'put'], ['csrf', 'auth']);

更多示例

此示例展示了您如何嵌套组并同时使用过滤器、域名和前缀。

Route::group(array('prefix' => '{locale}'), function()
{
    Route::controller('auth', 'AuthController');
    
    Route::bunch(function()
    {
        Route::get('/', 'UserController@profile');
        
        Route::group(array('domain' => 'admin.laravel.dev'), function()
        {
            Route::resource('posts', 'AdminPostsController');

            Route::controller('/', 'AdminController');
        });
    })->before('auth');
})->where('locale', '(en|fr)');

更改

v1.0.3

  • 修复了对原始Laravel路由器所做的更改。

v1.0.2

  • 修复了重新排序定义在组中的路由的bug。现在路由顺序被正确维护。

v1.0.1

  • 允许将数组作为表达式给出,并将其转换为合适的正则表达式。
  • 添加了on方法,以便在指定的HTTP动词上应用过滤器。

v1.0.0

  • 首次发布。

许可

在2-clause BSD许可下发布。版权所有2013 Jason Lewis。