sfForm

フォームクラス作成

 symfony propel:build-form

基底フォームクラス

 class BaseMemberForm extends BaseFormPropel
 {
   public function setup()
   {
     $this->setWidgets(array(
        'id'   => new sfWidgetFormInputHidden(),
        'name' => new sfWidgetFormInput(),
     ));
     $this->setValidators(array(
        'id'   => new sfValidatorPropelChoice(array('model' => 'Member', 'column' => 'id', 'required' => false)),
        'name' => new sfValidatorString(array('max_length' => 256)),
     ));
     (略)
   }
  • lib/form/base/BaseMemberForm.class.php
  • 基底フォームクラスはデータベースを基に自動的に生成される。

派生フォームクラス

 class MemberForm extends BaseMemberForm
 {
   public function configure()
   {
     $this->widgetSchema['name'] = new sfWidgetFormInput();
     $this->widgetSchema->setLabel('name', '名前');
     $this->validatorSchema['name'] = new sfValidatorString();
     $this->validatorSchema['name']->setMessage('min_length', sprintf('名前の文字数は%d文字以上で入力してください', 4));
     $this->validatorSchema['name']->setOption('min_length', 4);
     $this->validatorSchema['name']->setOption('required', true);
     $this->validatorSchema['name']->setMessage('required', '名前は必須です');
    (略)
   }
 }
  • lib/form/MemberForm.class.php
  • 派生フォームクラスに、業務に基づいたヴァリデーションや、ユーザにUIとして提供するラベルを設定する。

コントローラ

 public function executeInput(sfWebRequest $request)
 {
   $this->form = new MemberForm();
 } 
 public function executeRegister(sfWebRequest $request)
 {
   $member = $request->getParameter('member');
   $this->form->bind($member);
   if( $this->form->isValid() === true ){
      // $memberをDBに入れる
   } else {
     $this->getUser()->setAttribute('member_data', $member);
     $this->redirect('entry/input');
   }
 }

テンプレート

 <form action="<?php echo url_for('entry/register') ?>" method="post">
   名前:<?php echo $form['name'] ?><br />
   <?php if( $form['name']->hasError() === true ) { ?>
       エラー:<?php echo $form['name']->getError() ?><br />
   <?php } ?>    
   <input type="submit" />
 </form>
  • inputSuccess.php

ウィジェット・バリデータ

ウィジェット

バリデータ

参考


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS