[Zend Framework] Zend_Form: Zend_Form を使った form

Twitter Bootstrap の class も追加してみた。

[markdown]

Zend_Form 2013-07-13 11-13-00

ビューファイルには下記を書くだけで良い。

“`php:application/views/scripts/index/sitemap.phtml
form->render() . PHP_EOL; ?>
“`

このあたりも含めて書いてみる。

> * [Zend_View – url ヘルパークラスでリンクを生成する | deadwood](https://www.d-wood.com/blog/2013/07/13_4255.html)
> * [Zend_Form – Zend_Form_Element とデコレータ | deadwood](https://www.d-wood.com/blog/2013/07/13_4264.html)
> * [Zend_Form – Zend_Form_Element をHTML5要素に対応させる | deadwood](https://www.d-wood.com/blog/2013/07/13_4272.html)

“`php:application/controllers/IndexController.php
setMethod(‘post’)
->setAction(
$this->view->url(array(‘controller’ => ‘index’,
‘action’ => ‘sitemap’,
‘module’ => ‘default’),
‘sitemap’)
);
$text = new Zend_Form_Element_Text(‘text’);
$decorators = array(
array(‘ViewHelper’),
array(‘Errors’),
array(‘Description’, array(‘tag’ => ‘span’, ‘class’ => ‘help-block’)),
array(‘HtmlTag’, array(‘tag’ => ‘dd’)),
array(‘Label’, array(‘tag’ => ‘dt’)),
);
$text
->setAttrib(‘placeholder’, ‘Type something…’)
->setDescription(‘Example block-level help text here.’)
->setDecorators($decorators)
->setLabel(‘Text’)
->addFilter(‘StringToLower’)
->setRequired(true);
$date = new My_Date(‘date’);
$date
->setValue(‘2013-08-01’)
->setLabel(‘Date’)
->setRequired(true)
->addValidator(‘Date’);
$send = new Zend_Form_Element_Submit(‘send’);
$send
->setAttrib(‘class’, ‘btn’);
$form
->setAttrib(‘class’, ‘form-horizontal’)
->addElement($text)
->addElement($date)
->addElement($send);
$this->view->assign(‘form’, $form);
if ($this->getRequest()->isPost()) {
if ($form->isValid($this->getRequest()->getPost())) {
$text = $this->getRequest()->getParam(‘text’);
$date = $this->getRequest()->getParam(‘date’);
$data = array(
‘text’ => $text,
‘date’ => $date
);
Zend_Debug::dump($data);
}
}
}
}
“`

追記(2013/07/16)
最後のformの値を取得する方法ですが、下記のように書くだけでいいんですね。

“`php:application/controllers/IndexController.php
if ($this->getRequest()->isPost()) {
if ($form->isValid($this->_getAllParams())) {
$data = $form->getValues();
Zend_Debug::dump($data);
}
}
“`

> * [Zend_Form クイックスタート – Zend_Form – Zend Framework](http://framework.zend.com/manual/1.12/ja/zend.form.quickstart.html#zend.form.quickstart.puttingtogether)

## 補遺

form-horizontal を class につけたが、もっとタグを足さないと表示されないことに気がつきました。
といっても、デコレータが大変そうだなと思いグーグル先生に聞いたところ、こんなライブラリがありました。

> * [Emagister/zend-form-decorators-bootstrap](https://github.com/Emagister/zend-form-decorators-bootstrap)
> * [komola/Bootstrap-Zend-Framework](https://github.com/komola/Bootstrap-Zend-Framework)

ということでメモ。

その他

> * [php – Zend form setRequired(true) or addValidator(NotEmpty) – Stack Overflow](http://stackoverflow.com/questions/3871460/zend-form-setrequiredtrue-or-addvalidatornotempty)

[/markdown]