■結論
コントローラ
<?php class Admin_IndexController extends Zend_Controller_Action { public function indexAction() { $form = $this->createForm(); $this->view->form = $form; } public function registerAction() { $form = $this->createForm(); if(!$form->isValid($this->_getAllParams())){// error $this->view->assign('form', $form); return $this->render('index'); } else{// success $this->_dbh->register($form->getValues()); } } private function createForm() { $form = new Zend_Form(); $form->addElement( 'text', 'name', array( 'validators' => array( array('Regex', false, array('/^[a-z]/i')) ), 'label' => 'Name : ', 'required' => true 'filters' => array( 'StringToLower', 'StripTags' ) ) ); $form->addElement('hash', 'checkHash'); $form->addElement('submit', '送信'); return $form; } } ?>
index.phtml
<?php echo $this->form; ?>
最初にZend_Formのインスタンスを作成する。
他のモジュールとの連携
- バリデート(Zend_Validate)
- フィルタリング(Zend_Filter)
■Zend_Form
コントローラ
$form = new Zend_Form(); $form->setAction('/admin/index/register/')->setMethod('post'); $this->view->form = $form;
ビュー
<?php echo $this->form; ?>
出力
<form enctype="application/x-www-form-urlencoded" action="/admin/index/register/" method="post"> <dl class="zend_form"> </dl> </form>
■ 要素を作る
簡単。(コントローラ)
$name = $form->createElement('text', 'name');
addElement がもっと簡単(コントローラ)
$form->addElement('text', 'name');
バリデートもフィルタリングも一緒に追加できちゃう。(コントローラ)
$form->addElement( 'text', 'name', array( 'validators' => array( array('Regex', false, array('/^[a-z]/i')) ), 'label' => 'Name : ', 'required' => true, 'filters' => array( 'StringToLower', 'StripTags' ) ) );
こんなんもある。めんどー。(コントローラ)
require_once 'Zend/Form/Element/Text.php'; $name = new Zend_Form_Element_Text('name');
■ バリデータを作る
addValidator(mixed $nameOrValidator, bool $breakChainOnFailure, array $options)
$name = new Zend_Form_Element_Text('name'); $name->addValidator('Alnum', false, array(true)) ->addValidator('Regex', false, array('/^[a-zA-Z\s]+/')) ->setLabel('Name : ') ->setRequired(true);
- Zend_Form_Element::addValidator(string $class, bool $is_next, array $options);
- 第一引数で指定したバリデータを要素に付加する。
バリデータ一覧
http://framework.zend.com/manual/ja/zend.validate.set.html
■フィルターを作る
addFilter(mixed $nameOrFilter, array $options)
$name = new Zend_Form_Element_Text('name'); $name->addFilter('StringToLower');