2016-06-22 3 views
0

Я создаю предложение для продуктов Вот почему я реализовал несколько моделей при создании функции в контроллеревстроенная функция валидатора не работает для модели в yii2

public function actionCreate() 
{ 
    $model = new Offer(); 
    $wmodel = new Wmoffer(); 
    $pmodel = new Product(); 
    $ummodel = new Unitofmeasurement(); 
    $qvmodel = new OfferingValue(); 
    $blmodel = new OfferLocation(); 

    if ($model->load(Yii::$app->request->post()) && $model->validate()) { 
    // code manipulation 
    }else{ 
     return $this->render('create', [ 
      'model' => $model, 
      'wmodel' => $wmodel, 
      'pmodel' => $pmodel, 
      'qvmodel' => $qvmodel, 
      'blmodel' => $blmodel, 
      'ummodel' => $ummodel 
     ]); 
    } 

все мои моделей распространяется на ActiveRecord аспект Wmoffer() эта модель выглядит как показано ниже

use Yii; 
use yii\base\Model; 
use yii\web\UploadedFile; 
use yii\helpers\FileHelper; 

class Wmoffer extends Model 
{ 
    public $bIsProductOrService; 
    public $iCatalogueID; 
    public $imageProduct; 
    public $nHasCurrencyValue; 
    public $nHasCurrencyValueMRP; 
    public $BusinesslocationIds; 


    public function rules() 
    { 
    // validation rules 

Теперь мне нужно реализовать встроенный валидатор для начала, сравнение дат конца [Дата начала должна быть больше, чем End Date]

Я пробовал this и this, но это не работает. Я знаю, что чего-то не хватает, что вызывает это. Любые предложения будут заметны. Спасибо

+0

Что не работает? как любая ошибка? или просто проверка не выполняется? –

+0

в функции '' wmoffer() 'rules ' ['nHasCurrencyValue', 'customValidator', 'params' => ['extraFields' => 'nHasCurrencyValueMRP']], ' ' public function customValidator ($ attribute, $ params) { if ($ this-> nHasCurrencyValue> $ this -> {$ params ['extraFields'}} { $ this-> addError ('nHasCurrencyValue', 'Max Error'); } } ' Я реализовал это, но он не работает – dod29

ответ

0

Вы должны проверить значение $model->errors после вызова $model->validate() для поиска ошибок проверки.

Вашей дата метод валидатора может быть что-то вроде:

public function validateDates($attribute, $params) { 
    if ($this->hasErrors()) { 
     return; 
    } 
    if ($this->dateStart > $this->dateEnd)) { 
     $this->addError($attribute, 'Start date can not be greater than end date'); 
    } 
} 

Добавьте его rules() в моделях серверного.

+0

@ stig-js Я добавил это, но его не работает в моем случае :( – dod29

Смежные вопросы