@blog.justoneplanet.info

日々勉強

Zend_Formを触ってみる

■結論

コントローラ

<?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');

フィルタ一覧

http://zendframework.com/manual/1.5/ja/zend.filter.set.html

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment