在Symfony 4上,我尝试为DefaultController提供__call方法,该方法将能够处理对/ api / {model}的所有调用,例如:
#config/routes.yml
get:
path: /api/{model}/
defaults: { _controller: 'App\Controller\DefaultController::get' }
“ get”方法未在DefaultController上定义,但是我有__call()方法来处理它。
我已经读过有关PropertyAccessor Class的知识,该知识允许您从php代码的其他部分调用这些不存在的方法,但是当在route.yml文件中使用它们时则不能。
在Laravel上,它工作正常,路由指向DefaultController @ get,并且控制器上的__call方法正确处理了它。
感谢您的帮助。
答案 0 :(得分:3)
我不知道为什么这不起作用,但是可能是因为如果您的方法存在,Symfony会进行一些代码自省。
我不认为您应该这样做是出于两个原因:
__call
比使用正确的函数定义要慢,并且您知道应该在路由中定义函数时对其进行定义如果您确实需要“全部捕获”功能,则可以从getAction
函数中调用它:
class SomeController
{
public function get() {
return $this->catchAll(__METHOD__);
}
public function catchAll($method) {
// do whatever you want
}
}