В моем проекте у меня есть класс BaseController, который реализует несколько методов, используемых всеми моими контроллерами.Symfony2 Наследование Аннотации
Теперь я хотел добавить @QueryParam для этого базового класса. Мой класс выглядит следующим образом:
class DoctrineRESTQueryController extends FOSRestController
{
/**
* @QueryParam(name="start",default=0)
* @QueryParam(name="limit",default=null)
*/
public function getQueryResponseAction (ParamFetcher $paramFetcher) {
}
}
Теперь у меня есть фактический контроллер, который простирается от моего базового контроллера:
class DefaultController extends DoctrineRESTQueryController {
/**
* Retrieves all SI Prefixes in the database
*
* @Routing\Route("/siprefix", defaults={"method" = "get","_format" = "json"})
* @Routing\Method({"GET"})
* @ApiDoc(output="array<PartKeepr\SiPrefixBundle\Entity\SiPrefix>")
*
* @View()
*
* {@inheritdoc}
*/
public function getQueryResponseAction(ParamFetcher $paramFetcher) {
$paramFetcher->get("start");
}
}
К сожалению, Symfony2, кажется, не наследует @QueryParam аннотаций от суперкласса, потому что вызов $ paramFetcher-> get («start») приводит к исключению «No @ QueryParam/@ RequestParam конфигурации для параметра« start »».
Есть ли способ сделать работу наследования аннотаций или любое другое решение, поэтому мне не нужно добавлять @QueryParam для каждого из моих контроллеров?
Удивительно!Один маленький багфикс: Обычай читатель должен проверить, если родительский метод на самом деле существует: если ($ ParentClass && $ parentClass-> hasMethod ($ ме-> getShortName())) {$ parentMethod = $ parentClass-> getMethod ($ ме-> getShortName()); $ parentParams = parent :: getParamsFromMethod ($ parentMethod); } return array_merge ($ params, $ parentParams); } – Felicitus
Я обновил свой ответ. –