Propelフォーム

フォームクラス作成

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

Last-modified: 2011-08-09 (火) 19:12:00 (2679d)