2013-11-26 44 views
1

我是一个奇怪的问题,我不知道如何解决。 我创建了一个datatransformer,其中除在我的其他项目其他的事情,完美的作品,但是当我开始页面我得到这个错误:DataTransformer得到错误“undefined call method getName”

FatalErrorException: Error: Call to undefined method 
Acme\CoreBundle\Transformer\HiddenToIdTransformer::getName() in 
/var/www/Acme/vendor/symfony/symfony/src/Symfony/Component/Form/Extension/DependencyInjection/DependencyInjectionExtension.php line 49 

下面的代码:

变压器

class HiddenToIdTransformer implements DataTransformerInterface 
{ 
    /** 
    * @var ObjectManager 
    */ 
    protected $objectManager; 

    /** 
    * @var string 
    */ 
    protected $class; 

    public function __construct(ObjectManager $objectManager) 
    { 
     $this->objectManager = $objectManager; 
    } 

    public function transform($entity) 
    { 
     if (null === $entity) { 
      return; 
     } 

     return $entity->getId(); 
    } 

    public function reverseTransform($name) 
    { 
     if (!$name) { 
      return null; 
     } 

     $entity = $this->objectManager 
      ->getRepository('AcmeCoreBundle:Locality') 
      ->findOneByLocality($name); 

     if (null === $entity) { 
      throw new TransformationFailedException(); 
     } 

     return $entity; 
    } 
} 

类型

class EntityHiddenType extends AbstractType 
{ 
    /** 
    * @var ObjectManager 
    */ 
    protected $objectManager; 

    public function __construct(ObjectManager $objectManager) 
    { 
     $this->objectManager = $objectManager; 
    } 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $transformer = new HiddenToIdTransformer($this->objectManager); 
     $builder->addModelTransformer($transformer); 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'class' => null, 
      'invalid_message' => 'The entity does not exist.', 
     )); 
    } 

    public function getParent() 
    { 
     return 'hidden'; 
    } 

    public function getName() 
    { 
     return 'entity_hidden'; 
    } 
} 

服务

<service id="datatransformer.entity_hidden" class="Acme\CoreBundle\Transformer\HiddenToIdTransformer"> 
     <argument type="service" id="doctrine.orm.entity_manager" /> 
     <tag name="form.type" alias="entity_hidden" /> 
</service> 

并以这种方式召回变压器:

->add('locality', 'entity_hidden') 

我不明白什么是错的,我再说一遍,我在其他项目中,完全相同的代码工作正常!

也许这是2.3.7发生的错误?

+0

btw。你目前没有在form-type中使用entity-manager =>考虑删除依赖项:)我的答案解决了你的问题。 – nifr

回答

2

您已配置类Transformer作为标记form.type而不是形式式的A类业务:

<service 
    id="datatransformer.entity_hidden" 
    class="Acme\CoreBundle\Transformer\HiddenToIdTransformer" <!-- <= HERE --> 
> 

形式式的服务定义应该是这样的:

<service id="form.type.entity_hidden" class="Acme\CoreBundle\Form\Type\EntityHiddenType"> 
     <argument type="service" id="doctrine.orm.entity_manager" /> 
     <tag name="form.type" alias="entity_hidden" /> 
</service> 

如果你想让你的数据转换器成为服务,那么不要用form.type来标记它,否则symfony会尝试将它称为getName()这个不存在的方法。

取下标签...

<tag name="form.type" alias="entity_hidden" /> 

...和异常就会消失。

+0

nifr非常感谢! 我疯了,因为一个很愚蠢的错误! – Lughino

相关问题