我在我的路线中使用自定义ParamConverter,不仅要保持控制器的精益,还要重用参数转换算法。它使用route参数作为哈希映射的索引,并将请求参数设置为相应的值。像魅力一样。
class EntityParamConverter implements ParamConverterInterface
{
protected $classNames;
public function __construct($classnames = array())
{
$this->classNames = $classnames;
}
function apply(Request $request, ParamConverter $configuration)
{
$options = $configuration->getOptions();
$paramName = $configuration->getName();
$nameParam = isset($options['entity_name']) ? $options['entity_name'] : 'entityname';
if (empty($request->get($nameParam))) {
return false;
}
$entityName = $request->get($nameParam);
if (empty($this->classNames[$entityName])) {
return false;
}
$entityClass = $this->classNames[$entityName];
$request->attributes->set($paramName, $entityClass);
return true;
}
function supports(ParamConverter $configuration)
{
return empty($configuration->getClass());
}
}
我的问题是我不知道如何从控制器内生成该路由的URL,而不必告诉控制器有关哈希映射的信息。有没有办法逆转ParamConversion,或者这是一个错误的方法开始?