web-dev-qa-db-ja.com

Yii2、属性名付きのカスタム検証メッセージ

ログインフォームでは、すべての検証メッセージの最後にglyphicon-removeアイコンと対応するフィールド名を付ける必要があります。だから私はLogin modelで以下のコードを使用しました。

['email', 'required', 'message' => 'Email cannot be blank<span class="glyphicon glyphicon-remove"></span>'],
['password', 'required', 'message' => 'Password cannot be blank<span class="glyphicon glyphicon-remove"></span>']

この上のコードの代わりに、以下のコードのようなものを使用する可能な方法はありますか?.

[['email', 'password'], 'required', 'message' => $attribute.' cannot be blank<span class="glyphicon glyphicon-remove"></span>']

上記のコードの考え方は、すべてのフィールドに対応するフィールド名を動的に取得することです。

必要なことをしてください。ありがとう。

更新

ここで使用したHTMLコード(<span class="glyphicon glyphicon-remove"></span>)は、encode=>'false'を使用して正しく出力されます。しかし、私が必要なのは、すべてのフィールドに個別に定義するのではなく、すべてのフィールドに共通に定義する必要があります。

12
Siva.G ツ

メッセージで{attribute}を使用して、属性名を参照できます。

public function rules()
  {
    return [
      [
        ['email','password', 'password_verify', 'alias', 'fullname'],
        'required',
        'message' => '{attribute} is required'
      ],
      [['email'], 'email'],
      [['fullname'], 'string', 'max' => 50],
      [['password', 'password_verify'], 'string', 'min' => 8, 'max' => 20],
      [['password_verify'], 'compare', 'compareAttribute' => 'password'],
  ];
}

{min}{requiredValue}など、バリデーターで設定されている他のオプションを使用することもできます

26
Alfred_P

これをフォームに追加します。

_ form.php

<?php
   $form = ActiveForm::begin([
            'options' => ['enctype' => 'multipart/form-data'],
            'fieldConfig' => ['errorOptions' => ['encode' => false, 'class' => 'help-block']] 
   ]);
?>

errorOptionsデフォルトのエンコードはtrueなので、htmlコードはメッセージとしてエンコードされるため、'encode' => falseを設定するまで機能しません。

2
Insane Skull