1

Yii2 を使用して「自動プレースホルダー」要素を作成しようとしていますが、質問に対する実際の回答が見つからなかったので、ここで試してみようと思いました。

たとえば、次のフィールドがあります。

<?= $form->field($model, 'username', 
    [
        'template'=>'{input}{label}{error}'
    ])
    ->textInput(['placeHolder'=>'{name}')
    ->label(false);
?>

ただし、この場合は明らかにプレースホルダー属性で「名前」をレンダリングします。しかし、使用している 's 変数に応じてプレースホルダー属性を自動的に生成しmodel、次のようにレンダリングしたいと思います。

<input type="text" id="loginform-username" class="form-control" name="LoginForm[username]" placeholder="Username">

form->fieldの属性にアクセスして挿入し、独自の要素内に表示する既知の方法はありますか?

4

2 に答える 2

2

はい、以下のようにモデル ファイルで属性ラベルを定義することで実行できます。

public function attributeLabels() {
    return [
      'username' => 'Username',
    ];
}

次に、次のようなフィールドに基づいてラベルを自動的に取得できます。

<?= $form->field($model, 'username', 
    [
        'template'=>'{input}{label}{error}'
    ])
    ->textInput(['placeholder' => $model->getAttributeLabel('username'))
    ->label(false);
?>

これで問題が解決することを願っています。

于 2016-08-05T20:38:05.257 に答える
0

余分な手間がかかる場合は、そのために ActiveField クラスを拡張できます。

class MyActiveField extends \yii\widgets\ActiveField
{
    public function textInput($options = [])
    {
        if (empty($options['placeholder'])) {
            $options['placeholder'] = $this->model->getAttributeLabel($this->attribute);
        }
        return parent::textInput($options);
    }
}

デフォルトのクラスの代わりにクラスを使用する必要があります。ビューで毎回行うことができます:

<?php $form = ActiveForm::begin([
    'fieldClass' => 'fully\qualified\name\of\MyActiveField'
]); ?>

または、ActiveForm を拡張します。

class MyActiveForm extends \yii\widgets\ActiveForm
{
    $fieldClass = 'fully\qualified\name\of\MyActiveField';
}

デフォルトの ActiveForm ウィジェットの代わりに使用します。

<?php $form = MyActiveForm::begin(); ?>

これで使用できるようになり<?= $form->field($model, 'attribute')->textInput() ?>(またはデフォルトな<?= $form->field($model, 'attribute') ?>のでtextInput)、プレースホルダーがそこにあるはずです。

于 2016-08-06T07:22:02.947 に答える