jasonlewis / enhanced-router
Enhanced Router 是 Laravel 4 路由的扩展,提供了一些增强功能。
Requires
- php: >=5.3.0
- illuminate/routing: 4.0.*
- illuminate/support: 4.0.*
This package is auto-updated.
Last update: 2024-08-24 12:53:26 UTC
README
Enhanced Router 是 Laravel 4 路由的扩展,提供了一些增强功能。
安装
将 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
要求。 - 使用
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');
现在,组中的所有过滤器都将应用 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。