例如,在以下代码中:
/**
* @Route("/patients", service="bundle1.controller.patient.index")
*/
final class IndexController
{
private $router;
private $formFactory;
private $templating;
private $patientFinder;
public function __construct(RouterInterface $router, FormFactoryInterface $formFactory, EngineInterface $templating, PatientFinder $patientFinder)
{
$this->router = $router;
$this->formFactory = $formFactory;
$this->templating = $templating;
$this->patientFinder = $patientFinder;
}
/**
* @Route("", name="patients_index")
*/
public function __invoke(Request $request) : Response
{
$form = $this->formFactory->create(PatientFilterType::class, null, [
'action' => $this->router->generate('patients_index'),
'method' => Request::METHOD_GET,
]);
$form->handleRequest($request);
$patients = $this->patientFinder->matching($form->getData() ?: []);
return $this->templating->renderResponse('patient/index.html.twig', [
'form' => $form->createView(),
'patients' => $patients,
]);
}
}
为什么__invoke
的路径注释是空的?
这个控制器的生命周期是什么?我的意思是,Symfony何时创建对象,何时执行类以使用__invoke
?
答案 0 :(得分:1)
空@Route
注释意味着在主要路线/patients
之后没有任何内容。 __invoke
是一种神奇的PHP方法,在您将类作为函数调用时执行(不提供任何方法)。
因此,当您点击路线__invoke
或从任何代码调用服务时,都会执行/patients
方法。