4

私は以前の質問をかなり徹底的に調べましたが、それは非常に単純なことのように思われるので、他の誰もこれをまだ尋ねていないことに驚いています。

CakePHPのFormHelperを使用して、ラベルに入力とラベルテキストをラップさせるにはどうすればよいですか?CakePHP2.3.1を使用しています。$this->Form->radio()いくつかの標準オプションを使用してを呼び出すと、次のようになります。

<input id="input_id" type="radio" ... />
<label for="input_id">label text</label>

私が探しているのは

<label for="input_id"><input type="radio" id="input_id" ... />label text</label>

私はこの種の使用を達成しました:

$this->Form->input('input1',array('options'=>$options,'type'=>'radio',
    'label'=>false
    'before'=>'<label>',
    'separator'=>'</label><label>',
    'after'=>'</label>'
));

しかし、明らかにこのソリューションは理想的ではありません。CakePHPがこれを達成するためのより簡単で「より適切な」方法を持っているかどうか誰かに教えてもらえますか?

4

2 に答える 2

14

自分で答えを見つけて解決しようとしたときに、これに出くわしました。クラスを変更/拡張する必要はありません。それは、適切なオプションを渡すことによって純粋に達成することができます。

これは私がしたことなので、ブートストラップで動作します:

$options = array(
           '1' => 'One',
           '2' => 'Two'
           );
$attributes = array(
            'class' => '',
            'label' => false,
            'type' => 'radio',
            'default'=> 0,
            'legend' => false,
            'before' => '<div class="radio"><label>',
            'after' => '</label></div>',
            'separator' => '</label></div><div class="radio"><label>',
            'options' => $options
            );

echo $this->Form->input('myRadios', $attributes); 

<div class="radio">これにより、ブートストラップマークアップに準拠するように各無線が独自に配置されます。単純なラベルラッピングが必要な場合は、divから要素を削除しbeforeafterseparator

于 2013-10-16T10:46:50.633 に答える
4

ヘルパーを拡張し、独自のメソッドを作成します。

<?php
// app/views/helpers/radio.php
class RadioHelper extends AppHelper {

    function display($id, $options = array()) {
        if (isset($options['options']) && !empty($options['options'])) {
            $rc = "";
            foreach ($options['options'] as $option) {
                $rc .= "<label>";
                $rc .= "<input ....>";
                $rc .= "</label>";
            }
            return($rc);
        }
        return(false); // No options supplied.
    }
}

?>

<?php

// some_controller.php
var $helpers = array('Radio');

?>

<?php 

// some_view.ctp
echo $this->Radio->display('input1', array('options' => $options));

?>

ここで、フォームヘルパーから独自のヘルパーにロジックをコピーしてください...

PS単一のメソッドを追加するだけの場合、ヘルパー全体が必要になることはほとんどありません。関数「display」をapp_helper.phpに追加し、すでにロードした「他の」ヘルパーから参照するだけです。これらはapp_helperを拡張するため、すべての子ヘルパーでdisplayメソッドを使用できます。

于 2013-03-27T02:51:00.063 に答える