如何在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 路由(因为这只是一条路由)。

例如:

  • 您不能通过路由名称引用选择的方法
  • 您不能将中间件附加到特定路由等。

越直白越好。

至少你可以使用其中之一:

  1. Route::resource()
  2. Rotute::controller()

在这两种情况下,您都需要为每个控制器定义路由。

示例:

  1. Route::resource('photo', 'PhotoController');

然后遵循控制器中的方法名称约定(索引、创建等)。

更多信息:http://laravel.com/docs/5.0/controllers#restful-resource-controllers

  1. Route::controller('users', 'UserController');

然后在您的控制器方法前加上 http 方法前缀,例如:public function getIndex()

更多信息:http://laravel.com/docs/5.0/controllers#implicit-controllers