paramconverter не конвертирует параметры

У меня проблема с Symfony 4. Я переношу существующее приложение с Symfony 3.3 на Symfony 4 и получаю ошибку, которую не могу исправить.

вот мой контроллер: BaseController — это контроллер, отвечающий на маршруты sm_admin

class HomeController extends BaseController
{
    public function __construct(ParamBagService $parambag, CacheService $cache) {
        parent::__construct($parambag, $cache);
        $this->routePrefix = 'sm_adminarea_';
    }


    /**
     * @Route("/", name="adminarea_index")
     * @Template("@SMAdmin/Home/index.html.twig")
     */
    public function indexAction(Area $area = null)
    {
        $this->area = $area;
        return parent::indexAction();
    }
}

вот мои маршруты.yaml

sm_admin:
    resource: "@SMAdminBundle/Controller/"
    type:     annotation
    prefix:   /

sm_admin_area:
    resource: "@SMAdminAreaBundle/Controller/"
    type:     annotation
    prefix:   /Area/{area}

Когда захожу на маршрут sm_admin все нормально. когда я перехожу к /area/the_id_of_area, я получаю следующую ошибку: argument 1 passed to indexAction must be of type Area or null, string provided Это позволяет мне думать, что параметр области не преобразуется и документ не извлекается из базы данных.

Я попытался добавить эту аннотацию paramConverter: @ParamConverter("area", options={"mapping"={"area"="id"}}), но получаю ту же ошибку...

Что я делаю не так ?


person PCLS    schedule 07.03.2018    source источник


Ответы (2)


Хорошо, я нашел решение здесь https://matthiasnoback.nl/2012/10/symfony2-mongodb-odm-adding-the-missing-paramconverter/

Конвертер параметров по умолчанию использовал доктрину ORM, а я использую доктрину ODM, поэтому мне просто нужно было добавить ths в servide.yaml:

param_converter:
    class: 'Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\DoctrineParamConverter'
    arguments: ['@doctrine_mongodb']
    tags:
        - { name: 'request.param_converter', converter: 'doctrine.odm' }
person PCLS    schedule 07.03.2018

Попробуйте использовать

@ParamConverter("area", class="YourBundle:Area")

как показано http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html#usage

person Gabb1995    schedule 07.03.2018