首页 > 解决方案 > Laravel 6.2 - 动态调用控制器动作

问题描述

我使用来自 Internet 的代码来动态调用控制器操作。这是代码,用于web.php. 但我不完全理解它的作用。

Route::match(['get', 'post'], '{controller}/{action?}/{params1?}/{params2?}', function ($controller, $action = 'index', $params1 = '',$params2 = '') {

    $params = explode('/', $params1);
    $params[1] = $params2;
    $app = app();
    $controller = $app->make("\App\Http\Controllers\\" . ucwords($controller) . 'Controller');
    return $controller->callAction($action, $params);
})->middleware('supadminauth');

有人可以解释吗?

标签: laravel

解决方案


Route::match(['get', 'post'], '{controller}/{action?}/{params1?}/{params2?}', function ($controller, $action = 'index', $params1 = '',$params2 = '') {

第一行查看请求,看它是 get 请求还是 post 请求,如果是其他类型的请求,则意味着它不匹配并且不会继续进行。然后将 url 分成 4 个部分,按其名称对应,并传递给具有相同名称的变量,即 $controller、$action、$param1 和 $params2,其中最后 3 个变量不需要存在(在末尾带有 ?名字)。

$params = explode('/', $params1);
$params[1] = $params2;

我相信这是一种创建参数数组的粗略方法,因为$params以下更合适。

$params = [$params1, $params2];

.

$app = app();
$controller = $app->make("\App\Http\Controllers\\" . ucwords($controller) . 'Controller');

然后加载相关的控制器。

return $controller->callAction($action, $params);

并运行相应的动作并传递所有参数。
希望这是有道理的。


推荐阅读