symfony sfFormでラベルと値を表示するwidget

sfFormで入力画面を作成する場合、各項目はwidgetを設定していきますが、
項目名と設定値を表示するのみのwidgetがありません。

入力させたくないけど、画面には表示したいというケースは結構あると思います。
プラグイン等もなさそうなので、専用のwidgetを作成してみました。

class myWidgetFormInputHiddenShowValue extends sfWidgetForm
{
  protected function configure($options = array(), $attributes = array())
  {
    // デフォルトは'div'タグで表示
    $this->addOption('tag', 'div');

    $this->setOption('is_hidden', false);
  }

  public function render($name, $value = null, $attributes = array(), $errors = array())
  {
    // hiddenタグを作成
    $hiddenTag = $this->renderTag('input', array('type' => 'hidden', 'name' =>$name, 'value'=>$value, 'class'=>null));
    if($this->getOption('tag'))
    {
      // 値表示用タグを作成
      $content =  $this->renderContentTag($this->getOption('tag'), $value, $attributes);
    } else {
      // タグ指定がなければ設定値を表示
      $content = $value;
    }
    return $content.$hiddenTag;
  }
}

オプションの’tag’で表示する際に使用するタグを指定できるようにしています。
デフォルトは’div’タグで表示します。
タグが必要ない場合は、’tag’=>nullと指定すれば値だけを表示します。

○ 以下使用例
$this->widgetSchema[‘name’] = new myWidgetFormInputHiddenShowValue(array(), array(‘class’=>’show_label’));

○出力結果
<div class="show_label">hogehoge</div><input type="hidden" name="content[name]" value="hogehoge" id="content_name_id" />

ソースを見れば、簡単に拡張ができるのがsymfonyの良いところですね。
(もし、デフォルトで出来るのであれば突っ込みお願いします)

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL