フォームには、start date
とend date
の2つのフィールドがあります。 start date
が存在する場合にのみend date
を検証したいと思います。他のフィールドが存在する場合のみyiiの検証
レールには、:if
があります。 yii
に類似したものはありますか?
フォームには、start date
とend date
の2つのフィールドがあります。 start date
が存在する場合にのみend date
を検証したいと思います。他のフィールドが存在する場合のみyiiの検証
レールには、:if
があります。 yii
に類似したものはありますか?
検証用にカスタム関数を定義します。
ルールを定義します。
array('end_date','checkEndDate');
は、カスタム関数を定義します。
public function checkEndDate($attributes,$params)
{
if($this->start_date){
if(!$this->validate_end_date($this->end_date))
$this->addError('end_date','Error Message');
}
}
あなたは、属性を個別を検証するためにvalidate()
methodを使用することができますので、エラーがある場合は、最初start_date
を検証し、検証をスキップすることができますそのようなもの:
<?php
// ... code ...
// in your controller's actionCreate for the particular model
// ... other code ...
if(isset($_POST['SomeModel'])){
$model->attributes=$_POST['SomeModel'];
if ($model->validate(array('start_date'))){
// alright no errors with start_date, so continue validating others, and saving record
if ($model->validate(array('end_date'))){
// assuming you have only two fields in the form,
// if not obviously you need to validate all the other fields,
// so just pass rest of the attribute list to validate() instead of only end_date
if($model->save(false)) // as validation is already done, no need to validate again while saving
$this->redirect(array('view','id'=>$model->id));
}
}
}
// ... rest of code ...
// incase you didn't know error information is stored in the model instance when we call validate, so when you render, the error info will be passed to the view
0123このことができます
// in your model's rules, mark every validator rule that includes end_date as skipOnError,
// so that if there is any error with start_date, validation for end_date will be skipped
public function rules(){
return array(
array('start_date, end_date', 'required', 'skipOnError'=>true),
array('start_date, end_date', 'date', 'skipOnError'=>true),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array('id, start_date, end_date', 'safe', 'on'=>'search'),
);
}
希望:
はまた、あなたはまた、CValidator classのskipOnError
属性を使用することができます。
免責事項:skipOnErrorソリューションについてはわかりません。バリデータの順序によって影響を受ける可能性があります。まだテストしていないが、動作するかどうかを調べることができます。個々の検証ソリューションはもちろん、いつでも動作します。
ご要望があれば教えてください。 –
怠け者のために、モデルのbeforeValidate
方法に条件付きの検証を追加:
if($this->start_date){
if(!$this->validate_end_date($this->end_date))
$this->addError('end_date','Error Message');
}
検証他に基づいて一つのフィールドのは、モデル規則の方法で行うことができます。 ここにルールメソッドがあります。
['start_date','required','when'=>function($model) {
return $model->end_date != '';
}]
私はこれがあなたに役立つことを願っています。
注:上記の解決策は、Yii 2 –
私はちょうどYiiでこの種の検証を完了しました。ここから参照することができます。 http://chevronscode.com/index.php/yii-model-rules-dynamic-required-if-extension.html – chen
** Yii2 **では、['when'](http:// www。プロパティ。 –