首页 文章

ParamConverter:声明异常symfony2

提问于
浏览
0

我正在尝试为我的项目创建一个参数转换器(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)

我不明白这个问题....

2 回答

  • 2

    由bartek回答:

    使用Sensio \ Bundle \ FrameworkExtraBundle \ Configuration \ ParamConverter;

    多谢 :)

  • 1

    这实际上是预期的行为:)看看你的 apply 方法:

    public function apply(Request $request, ParamConverter $configuration){
        return true;
    }
    

    第二个参数是类型提示为 ParamConverter . 由于您自己的转换器的名称完全相同,因此它假设有一个方法 apply ,它具有第二个类型的参数:

    namespace Test\ParamConvertersBundle\ProgramConverter\ParamConverter;
    

    ....这与超类的方法不符 .

    Solution: 尝试将您自己的类重命名为更具体一点 .

相关问题