【问题标题】:How to create a common routing rule in laravel 5.1?如何在 laravel 5.1 中创建通用路由规则?
【发布时间】:2015-09-02 04:24:51
【问题描述】:
我是 laravel 的新手。通过 doc,我知道我为每个不同的 url 编写了规则。是这样吗?我只是想要一个适用于所有网址的通用路由规则,例如
Route::get('/{Controller}/{method}', $Controller.'@'.$method);
我知道这是错误的,我尝试了很多,但无法找到正确的句子。
我只是希望 Base Url 之后的第一段成为控制器名称,第二段成为方法名称。
【问题讨论】:
标签:
laravel
laravel-5
laravel-routing
【解决方案1】:
在我使用这个的时候,
$controller = '';
$method = '';
$segments = $_SERVER['REQUEST_URI'];
$segments = str_replace('/cp/public/index.php/', '', $segments);
$arr_seg = explode('/',$segments);
if(count($arr_seg) > 1){
$controller = $arr_seg[0];
$method = $arr_seg[1];
}
Route::get('/{var1}/{var2}',$controller.'@'.$method);
它对我有用。
【解决方案2】:
我想你可以 - 如果你必须 - 这样做:
Route::get('/{controller}/{method}', function($controller, $method) {
$name = "\App\Http\Controllers\\" . $controller . 'Controller';
$class = new $name();
return $class->{$method}();
});
或者如果你有静态方法:
Route::get('/{controller}/{method}', function($controller, $method) {
return call_user_func(array("\App\Http\Controllers\\" . $controller . 'Controller', $method));
});
但我认为这不是一个好主意。
这样你就失去了 laravel 路由的所有“权力”(因为这只是一个路由)。
例如:
- 您不能通过路由名称引用选择的方法
- 您不能将中间件附加到特定路由等。
越明确越好。
至少你可以使用以下之一:
-
Route::resource() 或
Rotute::controller()
不过,在这两种情况下,您都需要为每个控制器定义路由。
示例:
Route::resource('photo', 'PhotoController');
然后遵循控制器中的方法名称约定(索引、创建等)。
更多:http://laravel.com/docs/5.0/controllers#restful-resource-controllers
Route::controller('users', 'UserController');
然后通过 http 方法为您的控制器方法添加前缀,例如:public function getIndex()
更多:http://laravel.com/docs/5.0/controllers#implicit-controllers