如何在laravel 5.1中创建通用路由规则?
How to create a common routing rule in laravel 5.1?
我是 laravel 的新人。通过文档,我知道我已经为每个不同的 url 编写了规则。是这样吗?我只是想要一个适用于所有 url 的通用路由规则,例如
Route::get('/{Controller}/{method}', $Controller.'@'.$method);
我知道这是错误的,我尝试了很多,但无法得到正确的句子。
I simply want that first segment after Base Url become controller name and second segment become method name.
我用这个的时候,
$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);
它对我有用。
我想你可以 - 如果你必须 - 这样做:
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));
});
但我认为这不是个好主意。
这样你就失去了所有 'power' 的 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
我是 laravel 的新人。通过文档,我知道我已经为每个不同的 url 编写了规则。是这样吗?我只是想要一个适用于所有 url 的通用路由规则,例如
Route::get('/{Controller}/{method}', $Controller.'@'.$method);
我知道这是错误的,我尝试了很多,但无法得到正确的句子。
I simply want that first segment after Base Url become controller name and second segment become method name.
我用这个的时候,
$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);
它对我有用。
我想你可以 - 如果你必须 - 这样做:
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));
});
但我认为这不是个好主意。
这样你就失去了所有 'power' 的 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