我正在尝试为我的项目创建一个参数转换器(symfony 2.4) 这是我的转换器:
namespace Test\ParamConvertersBundle\ProgramConverter;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ConfigurationInterface;
use Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\ParamConverterInterface;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\EntityManager;
class ProgramConverter implements ParamConverterInterface{
protected $class;
protected $repository;
public function __construct($class, EntityManager $em){
$this->class = $class;
$this->repository = $em->getRepository($class);
}
public function apply(Request $request, ParamConverter $configuration){
return true;
}
public function supports(ParamConverter $configuration){
return $this->class === $configuration->getClass();
}
}
这是让我疯狂的例外:
FatalErrorException:编译错误:Test \ ParamConvertersBundle \ ProgramConverter \ ProgramConverter :: apply()声明必须与Sensio \ Bundle \ FrameworkExtraBundle \ Request \ ParamConverter \ ParamConverterInterface :: apply(Symfony \ Component \ HttpFoundation \ Request $ request)兼容,Sensio \ Bundle \ FrameworkExtraBundle \ Configuration \ ParamConverter $ configuration)
我没有遇到问题......
答案 0 :(得分:2)
bartek回答:
使用Sensio \ Bundle \ FrameworkExtraBundle \ Configuration \ ParamConverter;
很多:)
答案 1 :(得分:1)
这实际上是预期的行为:)看看你的apply
方法:
public function apply(Request $request, ParamConverter $configuration){
return true;
}
第二个参数是类型提示为ParamConverter
。由于您自己的转换器的命名完全正确,因此它假设有一个方法apply
,其中包含第二个类型的参数:
namespace Test\ParamConvertersBundle\ProgramConverter\ParamConverter;
....这与超类的方法不符。
解决方案:尝试将您自己的类重命名为更具体一点。