laravel - 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');
有人可以解释吗?
解决方案
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);
并运行相应的动作并传递所有参数。
希望这是有道理的。
推荐阅读
- python - Selenium 无法添加到购物车错误
- android - Talkback 不会读取 ViewPager 中的所有片段,只读取第一个
- r - 如何从r中的ggplot中提取密度值
- excel - VBA:为什么打开随机语句失败?
- javascript - 如果它们包含完成,我是否需要在 try/catch 中包装 jest 测试
- flutter - 在下一页调用 Navigator.of().pop() 时重新加载上一页
- reactjs - onMouseMove + useState 在自定义轮播上滞后
- node.js - Res.send() 返回空数组
- xml - 如何修复 xml 模式文件中的命名空间错误
- rabbitmq - 无法在 RabbitMQ 中接收消息并且 UI 显示空队列