【ZendFramework】Zend_Formを使う
Zend_Formのいいところ
- プログラム側できちんとフォームを定義できる。
- 見た目の方は別のところで担当するとして、機能、内容の方をきちんと管理できる。
- 必須か任意か、どういう値が欲しいか(バリデーション)をフォームを定義しているクラスに集約できる。
- フォームの定義に従って入力チェックができる。
などなど。
こういう作り方が当たり前になればめんどくさいと感じなくなると思う。ルーズに成り行き任せでHTMLとphpを書きたいときにはめんどくさいかもしれない。
Zend_Form例
フォームの定義はこんな感じ。
class Application_Form_TestForm extends Zend_Form
{
public function init()
{
$this->setMethod('post');
$this->addElement('text', 'name', array(
'label' => '会社名',
'required' => true,
'filters' => array('StringTrim'),
'validators' => array(
array('validator' => 'StringLength', 'options' => array(0, 100))
)
));
$this->addElement('text', 'code', array(
'label' => '取引先番号',
'required' => true,
'filters' => array('StringTrim'),
'validators' => array(
'alnum',
)
));
$this->addElement('text', 'email', array(
'label' => 'メールアドレス',
'required' => false,
'filters' => array('StringTrim'),
'validators' => array(
'EmailAddress',
)
));
$this->addElement('select', 'tantosha', array(
'label' => '担当者',
'required' => false,
'multiOptions' => array(
'' => '選択してください',
1 => '佐藤',
2 => '加藤',
3 => '伊藤',
),
));
$this->addElement('textarea', 'note', array(
'label' => '備考',
'required' => false,
'cols' => 50,
'rows' => 5,
'validators' => array(
array('validator' => 'StringLength', 'options' => array(0, 20))
)
));
$this->addElement('submit', 'toroku', array(
'ignore' => true,
'label' => '登録する',
));
}
}
これをControllerで作ってViewに渡して、
$form = new Application_Form_TestForm(); $this->view->form = $form;
これをViewスクリプト側で、レンダリング。
こんな風にデフォルトの方法でレンダリングすると
<?php echo $this->form; ?>
こんな風に、フォームのHTMLが書き出される。
<form method="post" action=""> <dl> <dt>会社名</dt> <dd><input type="text" name="name" value="" /></dd> <dt>取引先コード</dt> <dd><input type="text" name="code" value="" /></dd> ...(あくまでも「こんな風」です。いろいろ省略してます。)
さてここで、dl,dt,ddタグではなくて、テーブルでレイアウトしたいときどうするか?また次回。
