在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接管
这个是什么原因呢
test/demolist/create?xxx=xxx 改成 test/demolist?xxx=xxx
额 这样的话 不是不能区分请求的方法了吗
你的 demolist 不是方法么?
demolist 改成其它值就行了啊
我是想把$method当控制器用 create当method用 把请求转发到其他地方处理
php 里__call() 是用来调用当前类不存在的方法时调用的,不是调用不存在的类的时候调用的,
所以你说的无法通过 php 的__call()来实现。
你可以设置 Route::fallback 来分析当前url,自己分割然后决定调用哪个类的哪个方法。
额 你应该没有理解我的意思 我是在方法内部示例化类 怎么实例化 取决于路径和参数
我奇怪的是 test/demolist 可以请求到 test类的_call方法 test/demolist/xxx 多一级就请求不到了
demolist/xxx 就不是一个合法的方法名,也就是不可能作为方法触发__call()
还有根据手册,默认路由 test/demolist/xxx 不会访问 test控制器,它访问的可能是
访问的是以下控制器
test/controller/demolistController.php 方法名xxx
controller/test/demolistController.php 方法名xxx
不是访问 test控制器
啊 对 controller是可以内部加目录的 忘了这个了