(続)確認画面自動生成(FormExtHelper)

d:id:oppara:20081114

FormHelper継承して、freeze属性持たせりゃいいんじゃないかと...

http://github.com/oppara/cakephp_helper_formext/tree/master

使い方

$formの代わりに、$formExtを使用する。


  • views/hoge/index.ctp:
<?php 
$formExt->freeze( $freeze ); // **
echo $formExt->create( 'Hoge', array( 'action' => 'index' ) ); 
echo $formExt->input( 'moge' );
echo $formExt->submit( ); 
echo $formExt->end(); 
?>
<?php 
var $helpers = array( 'Html', 'FormExt', 'Javascript' );
function index() {
  if ( empty( $this->data ) ) {
   $this->set( 'freeze', false ); // #1
  }
  else {
   $this->set( 'freeze', true ); // #2
  }
}
?>

#1の状態でのhtml

<form id="HogeIndexForm" method="post" action="/hoges">
<fieldset style="display:none;"><input type="hidden" name="_method" value="POST" /></fieldset>
<input name="data[Hoge][moge]" type="text" value="" id="HogeMoge" />
<div class="submit"><input type="submit" value="Submit" /></div>
</form>

#2の状態でのhtml

<form id="HogeIndexForm" method="post" action="/hoges">
<fieldset style="display:none;"><input type="hidden" name="_method" value="POST" /></fieldset>
入力された値<input type="hidden" name="data[Test][moge]" value="入力された値" id="HogeMoge" />
<div class="submit"><input type="submit" value="Submit" /></div>
</form>

FormHelperとFormExtHelperの違い


  • デフォルトで<div>でくくらない。labelをつけない。
<?php echo $formExt->input( 'foo' ); ?>

FormExtHelperが出力するhtml

<input name="data[Hoge][foo]" type="text" value="" id="HogeFoo" /><hr />

FormHelperが出力するhtml

<div class="input text">
<label for="HogeFoo">Foo</label>
<input name="data[Hoge][foo]" type="text" value="" id="HogeFoo" />
</div>

FormExtHelperで、FormHelperと同じ動作をさせる

<?php echo $formExt->input( 'foo', array( 'div' => true, 'label' => 'Foo' ) ); ?>
// 'label'=>true をつけないとラベルをつけてくれない...
<?php echo $formExt->input( 'moo', 
            array( 'type'=>'radio', 'options'=> array( '1'=>'radio1' ), 'label'=>true ) ); ?>
    // or
<?php echo $formExt->radio( 'moo', array( '1'=>'radio1' ) ); ?>

FormExtHelperが出力するhtml

<input type="hidden" name="data[Hoge][moo]" id="HogeMoo_" value="" />
<input type="radio" name="data[Hoge][moo]" id="HogeMoo1" value="1"  /><label for="HogeMoo1">radio1</label>

FormHelperが出力するhtml

<div class="input radio">
<fieldset><legend>Moo</legend>
<input type="hidden" name="data[Hoge][moo]" id="HogeMoo_" value="" />
<input type="radio" name="data[Hoge][moo]" id="HogeMoo1" value="1"  /><label for="HogeMoo1">radio1</label>
</fieldset>

FormExtHelperで、FormHelperと同じ動作をさせる

<?php echo $formExt->input( 'moo', 
            array( 'type'=>'radio', 'options'=> array( '1'=>'radio1' ), 'label'=>true, 'legend' => 'Moo' ) ); ?>
    or
<?php echo $formExt->radio( 'moo', 
            array( '1'=>'radio1' ), array( 'legend' => 'Moo' ) ); ?>

TODO

  • ドキュメント
  • file, year, month, dateTime, day, hour, minute, meridian対応
  • checkboxのラベル値を取れるようにする。
  • 複数選択(checkbox, select(multiple))された場合の表示方法(デリミタ等)を考える
  • 力技、大杉
  • testを書く(順番逆)
  • キャッシュの対応
  • gitの使い方を覚える
  • 自動生成といえるのか、少し疑問