【问题标题】:Laravel dynamic controller routeLaravel 动态控制器路由
【发布时间】:2017-10-17 15:38:39
【问题描述】:

我使用 Laravel 5.4,现在我想创建到控制器的动态路由,这意味着我可以直接访问 UserControllerProfile 函数 throw route,例如。

GET http://localhost/user/profile?userid=123

上面的示例 URL 将访问 UserController 和函数 profile,并在 ? 之后使用动态参数。如果我想访问不同的控制器,我只需将user 参数更改为Controller 名称。

我创建了一条这样的路线,它可以工作。

Route::get('v1/{controller_name}/{function_name}/{query?}', function ($controller_name, $function_name){

    $app = app();
    $controller = $app->make('\App\Http\Controllers\Api\\'.$controller_name.'Controller');
    return $controller->callAction($function_name, $parameters = array());
});

但是我不知道怎么传参数。

还有其他更好的方法吗?

【问题讨论】:

    标签: php laravel laravel-5 url-routing url-mapping


    【解决方案1】:

    我不确定我是否理解正确,但您可能想查看以下内容。

    Route::get('v1/{controller_name}/{function_name}/{query?}',
            function ($controller_name, $function_name, $query = null) {
        var_dump($controller_name, $function_name, $query);
    });
    

    访问http://localhost/v1/my-controller/my-function/my-parameter URL 输出:

    string 'my-controller' (length=13)
    string 'my-function' (length=11)
    string 'my-parameter' (length=12)
    

    访问http://localhost/v1/my-controller/my-function URL 输出:

    string 'my-controller' (length=13)
    string 'my-function' (length=11)
    null
    

    为了进一步扩展这个想法,可以这样写:

    Route::get('v1/{controller_name}/{function_name}/{query?}/{query2?}',
            function ($controller_name, $function_name, $query = null, $query2 = null) {
        var_dump($controller_name, $function_name, $query, $query2);
    });
    

    http://localhost/v1/my-controller/my-function/my-parameter/my-parameter2

    string 'my-controller' (length=13)
    string 'my-function' (length=11)
    string 'my-parameter' (length=12)
    string 'my-parameter2' (length=13)
    

    http://localhost/v1/my-controller/my-function

    string 'my-controller' (length=13)
    string 'my-function' (length=11)
    null
    null
    

    那么你可以使用:

    // ...
    return $controller->callAction($function_name, $parameters = [
        'param1' => $query,
        'param2' => $query2,
    ]);
    // ...
    

    【讨论】:

    • 我找到了自己的解决方案,但还是感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 2014-04-21
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    相关资源
    最近更新 更多