Итак, у меня есть контроллер Symfony, и я внедряю необходимые методы в мои методы с помощью параметров.
Один из параметров (MySqlGroupDAO $groupDAO
) используется всеми методами этого класса контроллера.
В настоящее время я передаю «общий» параметр как мой последний параметр в каждом методе следующим образом:
/**
* @Route("/{id}", methods={"POST"})
* @IsGranted("EDIT_GROUP", subject="parentGroup")
*/
public function addGroup(Request $request, MySqlGroupDAO $groupDAO) {
$group = new Group();
//code to init group from request
$groupDAO->addGroup($group);
return new Response("Adding $groupName");
}
Выполнение этого способа позволяет мне исключить мой __construct
метод.Однако я не уверен, что это лучший способ сделать это.Поскольку это распространено во всех методах, было бы лучше повторно добавить мой конструктор и сделать что-то вроде этого:
private $groupDAO;
public function __construct(
Config $config,
ValidatorInterface $validator,
TranslatorInterface $translator,
RequestStack $requestStack
) {
parent::__construct($config, $validator, $translator, $requestStack);
$this->groupDAO = new MySqlGroupDAO($config);
}
/**
* @Route("/{id}", methods={"POST"})
* @IsGranted("EDIT_GROUP", subject="parentGroup")
*/
public function addGroup(Request $request) {
$group = new Group();
//code to init group from request
$this->groupDAO->addGroup($group);
return new Response("Adding $groupName");
}
При этом я исключаю около полудюжины параметров во всех моих методах (в этом конкретном классе).Но я добавляю обратно в свой конструктор, что требует от меня добавить параметр класса и добавить несколько дополнительных параметров в мой конструктор, поскольку он расширяет другой класс.
Есть ли преимущество в том, чтобы сделать это одним способом по сравнению сДругое?
Спасибо.