如何在laravel 5.1中创建通用路由规则?

时间:2015-06-17 05:37:31

标签: laravel laravel-5 laravel-routing

我是laravel的新人。通过doc,我知道我已经为每个不同的URL写了规则。是这样吗?我只是想要一个适用于所有网址的通用路由规则,例如

Route::get('/{Controller}/{method}', $Controller.'@'.$method);

我知道这是错的,我尝试了很多,但不能得到适当的判决。

  

我只想在Base Url成为控制器名称后第一个段,第二个段成为方法名称。

2 个答案:

答案 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路由的所有“权力”(因为这只是一条路线)。

例如:

  • 您不能参考路线名称选择方法
  • 您无法将中间件附加到特定路线等。

更明确一点总是更好。

至少你可以使用以下方法之一:

  1. Route::resource()
  2. Rotute::controller()
  3. 在这两种情况下,您都需要为每个控制器定义路径。

    <强>示例:

    1. Route::resource('photo', 'PhotoController');
    2. 然后按照控制器中的方法名称约定(索引,创建等)。

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

      1. Route::controller('users', 'UserController');
      2. 然后通过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);

它为我工作。