을 사용하여 ObjectSelect 요소를 포함하는 Doctine 2 엔티티를 저장했습니다. Doctrine Hydrator tutorial과 함께 따라했지만 필드 세트에 ObjectSelect가 포함되어 있으면 저장하는 데 문제가 있습니다. 내 엔티티에서 ORM 매핑을 사용하고 있습니다. 기본적으로 id
및 name
인 Role
엔티티가 있습니다. id
, name
및 role
(ManyToOne) 인 User
엔티티도 있습니다. 나는 또한 나의 getters 및 setters 있습니다. 내 setRole()
메서드는 Role
엔티티를 매개 변수로 전달합니다.Zend Form
/** @param Role $role */
public function setRole(\Application\Entity\Role $role) {
$this->role = $role;
}
Doctrine Hydrator로 UserField 세트를 설정했습니다.
$this->setHydrator(new DoctrineHydrator($objectManager, 'Application\Entity\User'))
->setObject(new User());
목적은 역할
$this->add(array(
'type' => 'DoctrineModule\Form\Element\ObjectSelect',
'name' => 'role',
'options' => array(
'label' => 'Role',
'object_manager' => $objectManager,
'target_class' => 'Application\Entity\Role',
'property' => 'name'
)
));
난 다음 설치 DoctrineHydrator을 설정하고 UserFieldset을 추가하는 사용자 정의 폼에 대한 선택합니다.
내 컨트롤러 액션 일어나고있는 것 같다 무엇
public function addUserAction() {
$objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$form = new UserForm($objectManager);
$user = new User();
$form->bind($user);
if ($this->request->isPost()) {
$form->setData($this->request->getPost());
if ($form->isValid()) {
$objectManager->persist($user);
$objectManager->flush();
}
}
return array('form' => $form);
}
는 역할의 ID가 setRole보다는 객체에 전달되는 것입니다. 해결 방법으로 나는 내 행동을 수정 한 :
if ($form->isValid()) {
$objectManager->persist($user);
$data = $this->request->getPost();
$role = $objectManager->find('Application\Entity\Role', $data->user['role']);
$user->setRole($role);
$objectManager->flush();
}
이 추가 단계가 필요하지 않아야 것처럼 보인다, 그러나 나는 또한 바인딩해야하는 경우 내가 내 setRole을 수정해야하는지 확실하지 않다거나 양식에 대한 역할 엔터티. 이것은 분명히 단순화 된 예제이지만, 실제 형식에는 이와 같은 컨트롤러에서 코딩해야하는 지루한 연관이 많이 있습니다.
업데이트 : 게시글 및 양식에 대한 디버그 정보입니다.
var_dump($form->getData());
var_dump($this->request->getPost());
출력
object(Application\Entity\User)[395]
protected 'id' => int 6
protected 'name' => string 'Jane Doe' (length=8)
protected 'role' => null
object(Zend\Stdlib\Parameters)[146]
public 'user' =>
array (size=3)
'id' => string '' (length=0)
'name' => string 'Jane Doe' (length=8)
'role' => string '3' (length=1)
public 'submit' => string 'Add User' (length=8)
는 확인할 수 없습니다 내 행동에서 사용자를 저장하려면? 또는 ID 일뿐입니다. ID 만이'setRole()'메쏘드에서 실제로 오류를 반환해야합니다 (객체와 ID가 필요하지 않으므로) – Sam
디버그 정보를 추가했습니다. 게시물 데이터에는 역할에 대한 ID가 포함되어 있지만 역할이 Role 객체가 아니기 때문에 양식에 설정된 경우 역할이 설정되지 않은 것입니다. – livearoha