[Zend Framework] Zend_Form: Zend_Form を使った form
Twitter Bootstrap の class も追加してみた。
ビューファイルには下記を書くだけで良い。
<?= $this->form->render() . PHP_EOL; ?>
このあたりも含めて書いてみる。
<?php
require_once 'My/Date.php';
class IndexController extends Zend_Controller_Action
{
public function sitemapAction()
{
// action body
$form = new Zend_Form();
$form
->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の値を取得する方法ですが、下記のように書くだけでいいんですね。
if ($this->getRequest()->isPost()) {
if ($form->isValid($this->_getAllParams())) {
$data = $form->getValues();
Zend_Debug::dump($data);
}
}
補遺
form-horizontal を class につけたが、もっとタグを足さないと表示されないことに気がつきました。
といっても、デコレータが大変そうだなと思いグーグル先生に聞いたところ、こんなライブラリがありました。
ということでメモ。
その他