paramconverter不转换参数

时间:2018-03-07 10:56:33

标签: php symfony parameters routing symfony4

我遇到了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();
    }
}

这是我的routes.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"}})但是我得到了相同的错误......

我做错了什么?

2 个答案:

答案 0 :(得分:1)

好的,我在这里找到了解决方案https://matthiasnoback.nl/2012/10/symfony2-mongodb-odm-adding-the-missing-paramconverter/

默认的paramconverter使用了doctrine ORM,我使用了doctrine ODM,所以我只需要在servide.yaml中添加它们:

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

答案 1 :(得分:-1)

尝试使用

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

http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html#usage