Yiiは初めてです。私はyiiwikiとドキュメントの助けを借りていくつかのタスクを実行しています。これで、検証付きの従業員詳細更新のフォームに記入しました。しかし、この検証プロセスが実際にどこで行われているのかわかりません。検証用のスクリプトは表示されていますが。また、エラーメッセージをカスタマイズするにはどうすればよいですか?誰かが私がこれを捕まえるのを手伝ってくれる?
3 に答える
message
組み込みバリデータの場合、一般に、モデルの 内でルールを定義するときにバリデーションのプロパティを設定することにより、エラー メッセージをカスタマイズできますrules()
。
一部の組み込みバリデータには、設定可能な追加の特定のエラー メッセージがあります。たとえばCNumberValidator
、プロパティtooSmall
およびもありtooBig
ます。追加のエラー メッセージがあるバリデータについては、バリデータのリファレンス ドキュメントで目立つように言及されています。
CModel::addError
カスタム検証ルールを使用する場合は、またはを使用してエラー メッセージを明示的に指定するCValidator::addError
ため、ここでもエラー メッセージを完全に制御できます。
CHtml::errorCss
入力フォームを表示する場合、プロパティ(エラーのある入力要素の CSS クラス)、CHtml::errorMessageCss
(入力要素の横に表示されるエラー メッセージのクラス)、およびCHtml::errorSummaryCss
(エラーのクラス)を使用して、さまざまな要素の CSS クラスをカスタマイズできます。印刷することを選択した場合、通常はフォームの上に表示される要約)。Yii 1.1.13 以降、各検証エラー メッセージのタグ名を選択するようにカスタマイズすることもできCHtml::errorContainerTag
ます (このタグはerrorMessageCss
クラスを取得します)。
あなたは私たちに多くの作業を与えていないので、電話番号の特定の形式をチェックする例を次に示します。このスニペットはモデル内にあり、モデルにはさらに多くのルールがあります:
public function rules()
{
array('contact_phone', 'phoneNumber'), //custom check fn see below
}
/**
* check the format of the phone number entered
* @param string $attribute the name of the attribute to be validated
* @param array $params options specified in the validation rule
*/
public function phoneNumber($attribute,$params='')
{
if(preg_match("/^\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{4}$/",$this->$attribute) === 0)
{
$this->addError($attribute,
'Contact phone number is required and may contain only these characters: "0123456789()- " in a form like (858) 555-1212 or 8585551212 or (213)555 1212' );
}
}
このような検証に関する多くの良い情報については、YII wiki も確認してください。
カスタマイズされたエラーを含むカスタム バリデーターの 1 つをここに置くだけかもしれません。$this->getAttributeLabel($field)
カスタムエラーに出力するために、バリデーター内の特定のフィールドの属性名/ラベルを取得するために使用する方法を参照してください。
public function checkFormFields($params)
{
$patternAccount = '/\d{20}/'; // двадцать цифр
$patternBic = '/\d{9}/'; // девять цифр
$patternINN = '/\d{10,12}/'; // от десяти до двенадцати цифр
$fields = explode(',', $params); // get the names of required fields
foreach ($fields as $field)
{
if($this->$field == '')
$this->addError($this->$field, Yii::t('general', $this->getAttributeLabel($field) ) .' '. Yii::t('general', 'should not be empty'));
if( $field == 'CurrentAccount' OR $field == 'CorrespondentAccount' )
{
if(!preg_match($patternAccount, $this->$field))
$this->addError($this->$field, Yii::t('general', $this->getAttributeLabel($field) ) .' '. Yii::t('general', 'should contain exact 20 digits'));
}
elseif( $field == 'BIC' )
{
if(!preg_match($patternBic, $this->$field))
$this->addError($this->$field, Yii::t('general', $this->getAttributeLabel($field) ) .' '. Yii::t('general', 'should contain exact 9 digits'));
}
elseif( $field == 'INN' )
{
if(!preg_match($patternINN, $this->$field))
$this->addError($this->$field, Yii::t('general', $this->getAttributeLabel($field) ) .' '. Yii::t('general', 'should contain between 10 and 12 digits'));
}
}
これが、エラーをカスタマイズする方法を明確にするのに役立つことを願っています.