2012-03-23 1 views
1

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

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 />'; 

Сообщение об ошибках будет отображаться всякий раз, когда происходит сбой проверки на месте, но не другая (который 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.' 
    ) 
); 

(от модели Местоположение):

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

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

$this->validationErrors = array(); 

Так линия

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

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

+0

Хех. Никогда не думал заглянуть в фактическое определение функции read(). Хорошо, теперь я вижу это; моя проблема в том, что без метода merge() я не сохраняю весь свой массив данных, чтобы пользователь мог исправить ошибки и правильно обновить запись. Любые советы по обходному пути к этому? – huzzah

+0

Все, что отправлено из формы, должно быть доступно в форме снова, когда проверка не удалась, если вы не измените содержание '$ this-> request-> data'. В любом случае, я думаю, использование 'find()' вместо 'read()' должно сохранять ошибки проверки. – nIcO

+0

Хм. Я продолжал использовать функцию merge(), потому что на самом деле я потерял все данные массива из моделей, которые не использовались в форме, как показано на http://stackoverflow.com/questions/9690300/cakephp- это-данные проигрывают-а-много в своем-массиве данных-после-формы подать. Раньше это вызывало проблемы, но с тех пор я изменил свои страницы редактирования, так что это уже не проблема. Поэтому я смогу удалить эту строку в конце концов. Так что спасибо тебе! – huzzah