3
我有一個學說實體,一個表單和2個字段集。 當我用值填充實體時,數值會按照預期水合到窗體中。 當我嘗試從表單數據創建一個實體時,它仍然是空的..表單不綁定後值到實體
我必須忘記一些東西,但不能找到它,我有幾個其他形式沒有fieldset,他們按預期工作。
有什麼想法?
貼出我的代碼如下
實體:
class User
{
/**
* @var int
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
* @ORM\Column(type="string", length=255, unique=true, nullable=true)
*/
protected $username;
..
}
形式:
class CreateUserForm extends Form
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('create-user');
$this->setAttribute('method', 'post');
// The form will hydrate an object
$this->setHydrator(new DoctrineHydrator($objectManager));
$userFieldset = new UserFieldset($objectManager);
$this->add($userFieldset);
// … add CSRF and submit elements …
$baseFieldset = new BaseFieldset($objectManager);
$baseFieldset->setUseAsBaseFieldset(true);
$this->add($baseFieldset);
}
}
UserFIeldset:
class UserFieldset extends Fieldset implements InputFilterProviderInterface
{
public function __construct($objectManager)
{
parent::__construct($name = 'user');
$this->setHydrator(
new DoctrineHydrator($objectManager, 'YrmUser\Entity\User')
)->setObject(new User());
$this->add(
array(
'name' => 'username',
'attributes' => array(
'type' => 'text',
'placeholder' =>'Username',
),
'options' => array(
'label' => 'Username',
),
)
);
...
}
}
BaseFieldset:
class BaseFieldset extends Fieldset implements InputFilterProviderInterface
{
public function __construct($objectManager)
{
parent::__construct('base');
$this->setHydrator(new DoctrineHydrator($objectManager));
$this->add(
array(
'name' => 'security',
'type' => 'Zend\Form\Element\Csrf',
'options' => array(
'csrf_options' => array(
'timeout' => 600
)
)
)
);
$this->add(
array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Save',
'class' => 'btn btn-success btn-lg confirm',
),
)
);
}
}
控制器動作:
public function createAction()
{
$form = new CreateUserForm($this->getObjectManager());
$entity = new User();
$form->bind($entity);
$request = $this->getRequest();
if ($request->isPost()) {
$form->setData($request->getPost());
if ($form->isValid()) {
$this->getObjectManager()->persist($entity);
$this->getObjectManager()->flush();
return $this->redirect()->toRoute($this->redirect);
}
}
return array(
'form' => $form
);
}
嗨,$ form-getData()的var_dump顯示一個「空」用戶實體(空的我的意思是這些值全都爲空)沒有區別,如果我使用setData或沒有.. – YRM
$ form-> isValid($ request-> getPost())不起作用,因爲它只是說我的表單對於setData無效,但它確實有效,但用戶實體值爲空 – YRM
imho,$ form-> isValid($ request-> getPost())有效,但有驗證有問題。你可以嘗試var_dump $ request-> getPost()。你是否在窗體上調用了'prepare()'來正確地啓動結構? – jmleroux