奏鸣曲管理与a2lix_translatable。如何做关系?

奏鸣曲管理与a2lix_translatable。如何做关系?

问题描述:

我想创建表Pracownik,它可以包含零或几个Zaklady实例并使用Sonata Admin来控制它。两个表都使用a2lix_translatable转换。奏鸣曲管理与a2lix_translatable。如何做关系?

所以我上课:在ZakladyZakladyTranslation

<?php 

namespace JCuryllo\InstituteBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Knp\DoctrineBehaviors\Model as ORMBehaviors; 

/** 
* @ORM\Entity 
*/ 
class PracownikTranslation 
{ 
use ORMBehaviors\Translatable\Translation; 

public function __toString() 
{ 
    return $this->getTitle(); 
} 


/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=255) 
*/ 
private $name; 

/* and other properties */ 

/** 
* Set name 
* 
* @param string $name 
* @return Pracownik 
*/ 
public function setName($name) 
{ 
    $this->name = $name; 

    return $this; 
} 

/** 
* Get name 
* 
* @return string 
*/ 
public function getName() 
{ 
    return $this->name; 
} 

/* and other getters and setter *. 

} 

我用非常类似的代码:

<?php 

namespace JCuryllo\InstituteBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Knp\DoctrineBehaviors\Model as ORMBehaviors; 

/** 
* Pracownik 
* 
* @ORM\Table() 
* @ORM\Entity 
*/ 
class Pracownik 
{ 

use ORMBehaviors\Translatable\Translatable; 

public function __call($method, $arguments) 
{ 
    return $this->proxyCurrentLocaleTranslation($method, $arguments); 
} 

/** 
* @ORM\ManyToOne(targetEntity="ZakladyTranslation") 
**/ 
private $zaklady; 


/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 



/** 
* and other properties 
*/ 


/** 
* Get id 
* 
* @return integer 
*/ 
public function getId() 
{ 
    return $this->id; 
} 

    /* and other getters and setter */ 

} 

和翻译。然后在PracownikAdmin我试着做某事,如:

protected function configureFormFields(FormMapper $formMapper) 
{ 

    $formMapper 
     ->add('zaklady', 'many_to_one',array(
     'required' => false, 
     )) 
     ->add('translations', 'a2lix_translations') 

    ; 
} 

,但它不工作(错误:未能加载类型“many_to_one”)。

many_to_one不是Sonata的可用表单类型,您必须将sonata_type_model或sonata_type_model_list用于多对一的关系。

例子:

protected function configureFormFields(FormMapper $formMapper) 
{ 

    $formMapper 
     ->add('zaklady', 'sonata_type_model_list',array(
      'required' => false, 
     )) 
     ->add('translations', 'a2lix_translations'); 
} 

文档:http://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/form_field_definition.html#advanced-usage-many-to-one

好吧,我都做到了。

Zaklady我加入:

public function __toString() 
{ 
    return $this->getTitle(); // getTitle is in ZakladyTranslation! 
} 

Pracownik我改变:

/** 
* @ORM\ManyToOne(targetEntity="ZakladyTranslation") 
**/ 
private $zaklady; 

到:

/** 
* @ORM\ManyToOne(targetEntity="Zaklady") 
**/ 
private $zaklady; 

PracownikAdmin

protected function configureFormFields(FormMapper $formMapper) 
{ 

    $formMapper 

     ->add('translations', 'a2lix_translations') 
     ->add('zaklady', 'sonata_type_model', array(
      'multiple' => true, 
      'by_reference' => false, 
      'required' => false 

     )) 


    ; 
}