hamedbahrami / enhanced-router

Enhanced Router 扩展,用于 Laravel 4.2,源自 Jason Lewis 的 Enhanced Router

1.0.4 2014-10-13 13:45 UTC

This package is not auto-updated.

Last update: 2024-10-02 08:23:09 UTC


README

Build Status

Enhanced Router 4.2

Enhanced Router 是从 Jason Lewis Enhanced Router 重建,用于 Laravel 4.0。Enhanced Router 是 Laravel 4 路由的扩展,提供了一些增强功能。大部分的 README.md 和整个扩展都是对 Jason Lewis 的原始扩展的复制,并对扩展进行了少量调整,以便其适用于 Laravel 4.2。

安装

将以下行添加到 composer.json

"repositories": [
		{
			"type": "git",
			"url": "https://github.com/hamedb89/enhanced-router"
		}
	],

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

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

就是这样。现在您可以为您的路由使用一些增强功能了。

功能

  • 在路由分组前缀和域名上设置 where 要求。
  • 使用 before 和 `after` 方法将过滤器应用于整个路由分组。
  • 将过滤器设置为在 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.dev 和 `shawn.laravel.dev`。

过滤器

路由分组

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

Route::group(array(), function()
{

})->before('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.4

  • 从原始扩展重建。现在与 Laravel 4.2 兼容。

许可证

版权所有 2014 Hamid Bahrami。

在 2 条条款的 BSD 许可下发布。版权所有 2013 Jason Lewis。