【问题标题】: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 路由的所有“权力”(因为这只是一个路由)。

    例如:

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

    越明确越好。

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

    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

    【讨论】:

      猜你喜欢
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 2020-08-17
      • 2015-11-07
      • 1970-01-01
      • 2016-02-11
      • 2016-01-10
      相关资源
      最近更新 更多