控制器空方法接管的问题 有些成功 有些失败

forwebreg

在test控制器内接管方法
public function __call($method, $request)
{
$path = explode('/', request()->path());
$action = $path[4] ?? 'index';
$class = "resource\" . $method;
$handler = new $class();
return $handler->$action($request);
}
当请求一个不存在的地址
如test/demolist 可以成功接管到
但是当请求test/demolist/create?xxx=xxx时 却会被Route::fallback接管
这个是什么原因呢

158 1 0
1个回答

walkor 打赏

test/demolist/create?xxx=xxx 改成 test/demolist?xxx=xxx

  • forwebreg 25天前

    额 这样的话 不是不能区分请求的方法了吗

  • walkor 25天前

    你的 demolist 不是方法么?

  • walkor 25天前

    demolist 改成其它值就行了啊

  • forwebreg 25天前

    我是想把$method当控制器用 create当method用 把请求转发到其他地方处理

  • walkor 25天前

    php 里__call() 是用来调用当前类不存在的方法时调用的,不是调用不存在的类的时候调用的,
    所以你说的无法通过 php 的__call()来实现。
    你可以设置 Route::fallback 来分析当前url,自己分割然后决定调用哪个类的哪个方法。

  • forwebreg 25天前

    额 你应该没有理解我的意思 我是在方法内部示例化类 怎么实例化 取决于路径和参数
    我奇怪的是 test/demolist 可以请求到 test类的_call方法 test/demolist/xxx 多一级就请求不到了

  • walkor 25天前

    demolist/xxx 就不是一个合法的方法名,也就是不可能作为方法触发__call()

    还有根据手册,默认路由 test/demolist/xxx 不会访问 test控制器,它访问的可能是
    访问的是以下控制器
    test/controller/demolistController.php 方法名xxx
    controller/test/demolistController.php 方法名xxx
    不是访问 test控制器

  • forwebreg 25天前

    啊 对 controller是可以内部加目录的 忘了这个了

×
🔝