2016-10-19 9 views
1

Я хотел бы создать мое приложение вокруг Sonata, но я сталкиваюсь с некоторыми проблемами ...(Sonata) Невозможно создать отношение OneToOne, не имея администратор связанного с ним

Я продлил BaseUser создать свои собственные Пользователь и я сделали то же самое для UserAdmin. Я создал другую сущность, на которой Пользователь имеет отношение OneToOne, но я не хочу, чтобы этот объект был управляемым пользователем с Администратором, связанным с этим объектом.

Единственный способ, которым я хочу, чтобы пользователь, чтобы заполнить эти объекты будут в UserAdmin, я пытался что-то вроде этого:

protected function configureFormFields(FormMapper $formMapper){ 
    parent::configureFormFields($formMapper); 
    $formMapper 
     ->tab('Client details') 
      ->with('Client Identity', array('class' => 'col-md-6')) 
       ->add("test", EntityType::class, array(
        "class" => "AppBundle:PersonDetails", 
        "property_path" => "details.test" 
       )) 
      ->end() 
     ->end(); 
} 

Вот мой класс User:

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\OneToOne(targetEntity="PersonDetails") 
    * @ORM\JoinColumn(name="details_id", referencedColumnName="id") 
    */ 
    private $details; 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->details = new PersonDetails(); 
    } 

    /** 
    * @return PersonDetails 
    */ 
    public function getDetails() 
    { 
     return $this->details; 
    } 

    /** 
    * @param PersonDetails $details 
    */ 
    public function setDetails($details) 
    { 
     $this->details = $details; 
    } 
} 

Единственное Я получаю выбор, который хочет, чтобы я выбрал существующий PersonDetails (я полагаю).

Как я могу это достичь? И, если это может быть легко достигнуто, почему он не появился в документации? Я думаю, что этот случай не очень редкости ..

Спасибо за вашу помощь

ответ

1

Sonata будет пытаться разобрать строку, переданную в add("test"), так что мы можем получить доступ к нашему лицу не двигают любую администрацией Sonata по простому add("details.test").

Нам не нужна дополнительная настройка для работы. Только не забудьте конфигурацию Doctrine для каскада Упорство и удаление:

В классе Пользователь:

public class User extends BaseUser{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\OneToOne(targetEntity="PersonDetails", cascade={"persist", "remove"}) 
    * @ORM\JoinColumn(name="details_id", referencedColumnName="id") 
    */ 
    private $details; 

    // The rest of the class 
} 

и в классе UserAdmin:

protected function configureFormFields(FormMapper $formMapper) 
{ 
    parent::configureFormFields($formMapper); 

    $formMapper 
     ->tab('Client details') 
      ->with('Client Identity', array('class' => 'col-md-6')) 
       ->add("details.test") 
      ->end() 
     ->end(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^