我遇到了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"}})
但是我得到了相同的错误......
我做错了什么?
答案 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