양식의 스위치 값에 따라 모델에서 규칙을 동적으로 대체하려고합니다. 감안Yii2 - 모델에 설정된 규칙을 동적으로 전환하십시오.
:
<?php
$form = ActiveForm::begin([
'enableAjaxValidation' => true,
'validationUrl' => Url::toRoute('anounce/validation')
]);
?>
컨트롤러 : 모델
public function actionValidation()
{
$model = new Anounce();
if (Yii::$app->request->isAjax && $model->load(Yii::$app->
request->post())) {
Yii::$app->response->format = 'json';
return ActiveForm::validate($model);
}
}
발췌 : idanounce_type
class Anounce extends \yii\db\ActiveRecord
{
private $currentRuleSet; // Current validation set
// Here are arrays of rules with assignment
private $fullRuleSet; // = [...];
private $shortRuleSet; // = [...];
private $minRuleSet; // = [...];
public function init()
{
parent::init();
$this->currentRuleSet = $this->fullRuleSet;
}
public function rules()
{
return $this->currentRuleSet;
}
public function beforeValidate()
{
if ($this->idanounce_type === self::FULL) {
$this->currentRuleSet = $this->fullRuleSet;
} else if ($this->idanounce_type === self::SHORTER) {
$this->currentRuleSet = $this->shortRuleSet;
} else if ($this->idanounce_type === self::MINIMAL) {
$this->currentRuleSet = $this->minRuleSet;
}
return parent::beforeValidate();
}
}
변수 규칙 간의 스위치이다. 유감스럽게도 값이 currentRuleSet
에 할당되었지만 전체 규칙 집합 (또는 init
에 사용 된 규칙 집합)에 따라 유효성 검사가 수행되었습니다.
규칙의 동적 전환을 작성하는 방법은 무엇입니까?
사운드
그런 다음 컨트롤러에서 입력에 따라 시나리오를 설정 좋은. 시나리오에 따라 규칙을 변경 (!)하는 법을 알고 있습니까? '게시'시나리오에서는 게시 이미지를'[[ 'upload'], 'file', 'skipOnEmpty'=> true, 'extensions'=> 'png, jpg']'로로드하고 'PDF' true, 'extensions'=> 'pdf'] ' –
두 규칙을 사용하고 ON을 사용할 수 있습니다. 'png, jpg', 'on'=> 'PUBLICATION'] 다음에 다른 규칙의 경우 [[업로드]], [파일], [skipOnEmpty] 'extension'=> 'pdf', 'on'=> 'PDF'] – mrateb
위대한! 마지막으로 - 사용자가 무언가를 변경할 때뿐만 아니라 데이터베이스에서 모델링 할 때 데이터를로드 할 때 (초기 설정 = 기본 시나리오 설정) 규칙을 전환해야했습니다. 불행히도, 나는 데이터를 데이터베이스에서 모델로 로딩 할 때이 메소드/이벤트를 찾지 못했습니다. 어쩌면 그런 방법/이벤트를 아십니까? –