Сообщения об ошибках не работают на одной модели, когда проверка не проходит - PullRequest
1 голос
/ 23 марта 2012

У меня есть форма, которая вызывает две отдельные модели. Моя проверка корректно работает, поскольку неправильно введенные данные не проходят проверку; однако сообщения об ошибках отображаются только в СВЯЗАННЫХ данных модели. Вот фрагмент моей формы с обеими моделями:

echo $this->Form->input('Location.exchange', array('size'=>'3', 'error' => array('class' => 'error')));
echo $this->Form->input('Location.sln', array('size'=>'4', 'error' => array('class' => 'error')));
echo '<br />';
echo $this->Form->input('unit_website', array('size'=>'65', 'label'=>'Your unit\'s website', 'error' => array('class' => 'error')));
echo '<br />';

echo $this->Form->input('specials', array('size'=>'65', 'label'=>'Your website\'s Specials page', 'error' => array('class' => 'error')));
echo '<br />';

Сообщения об ошибках будут отображаться всякий раз, когда валидация завершается неудачей для Location, но не для другого (который является Unit), что иронично, поскольку я в моем UnitsController. Вот код контроллера:

function edit($id) {
 $this->set('title', 'Edit your property');
 $this->Unit->id = $id;    
 if (empty($this->request->data)) {        
$this->request->data = $this->Unit->read();    
} else { 

    if ($this->Unit->saveAll($this->request->data)) {            
        $this->Session->setFlash('Your property has been updated.', 'success');            
    } else {
        Set::merge($this->Unit->read(), $this->request->data);
    } 
}
}

и вот фрагмент проверочных массивов из моей модели Location и моей модели Unit: (от модели Unit):

public $validate=array(
    'type'=>array(
        'rule'=>'notEmpty',
        'message'=>'You must choose what type of property this is.'
    ),
    'unitnum'=>array(
        'rule'=>array('custom', '/^[a-z0-9 -\'.\/&]*$/i'),
        'message'=>'Must be the name or number of your unit.'
    )
 );

(из модели Location):

public $validate = array(
        'area_code'=> array(
            'ac1'=> array(
                'rule'=>'numeric',
                'message'=>'Must be a number'
            ),
            'ac2'=>array(
                'rule'=>array('comparison', '>=',100),
                'message'=>'You must enter a valid area code'
            )
     );

1 Ответ

1 голос
/ 23 марта 2012

Если вы посмотрите на функцию Model-> read (), вы увидите, что она начинается с

$this->validationErrors = array();

Таким образом, строка

Set::merge($this->Unit->read(), $this->request->data);

очищает ошибки проверки

...