我是laravel的新人。通过doc,我知道我已经为每个不同的URL写了规则。是这样吗?我只是想要一个适用于所有网址的通用路由规则,例如
Route::get('/{Controller}/{method}', $Controller.'@'.$method);
我知道这是错的,我尝试了很多,但不能得到适当的判决。
我只想在Base Url成为控制器名称后第一个段,第二个段成为方法名称。
答案 0 :(得分: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
答案 1 :(得分:-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);
它为我工作。