Каков самый простой способ отображения ошибок проверки для hasMany-ассоциаций с использованием Model :: saveAssociated () в CakePHP 2.x?
Вот пример из кулинарной книги CakePHP. ( http://book.cakephp.org/2.0/ru/models/saving-your-data.html#saving-related-model-data-hasone-hasmany-belongsto )
echo $this->Form->create('Company', array('action' => 'add')); echo $this->Form->input('Company.name', array('label' => 'Company name')); echo $this->Form->input('Company.description'); echo $this->Form->input('Company.location'); echo $this->Form->input('Account.0.name', array('label' => 'Account name')); echo $this->Form->input('Account.0.username'); echo $this->Form->input('Account.0.email'); echo $this->Form->end('Add');
Когда проверка, например, для параметра Account.0.email не выполняется, поле формы не выглядит автоматически недействительным. Хотя ошибка указана в $ this-> Company-> Account-> validationErrors.
Есть ли способ автоматически аннулировать соответствующее поле и отображать соответствующую ошибку проверки?
Он не на 100% автоматизирован, но есть вещи, которые вы можете собрать вместе, которые предоставляет CakePHP.
Прежде всего, я предполагаю, что вы используете последнюю версию 2.4
Решение, которое я предоставляю, состоит из двух частей:
a) вы проверяете данные на уровне контроллера
b) вы определяете сообщение об ошибке в FormHelper на уровне просмотра.
Для части а)
вы можете ссылаться на эту ссылку http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.html#validating-data-from-the-controller
Основываясь на этой ссылке, я предлагаю два способа.
1) вы можете индивидуально проверить данные каждой модели.
Пример,
if ($this->Company->validates(array('fieldList' => array('name', 'location')))) { // valid } else { // invalid }
и затем вы делаете
if ($this->Account->validates(array('fieldList' => array('email')))) { // valid } else { // invalid }
Поскольку вы используете hasMany, поэтому есть вероятность, что вам может понадобиться проверить каждый отдельный набор данных учетной записи отдельно.
Поэтому вы, скорее всего, будете использовать цикл, так что вы можете использовать, и я цитирую,
если вы проверяете в цикле и хотите, чтобы каждый набор ошибок по отдельности не использовал invalidFields (). Вместо этого используйте validates () и получите доступ к свойству model validationErrors.
2) второй способ – использовать это
if ($this->Company->saveAll($this->request->data, array('validate' => 'only'))) { // validates } else { // does not validate }
Вы можете найти это в нижней части ссылки, которую я дал.
Теперь, как и для части b) отображения ошибок в FormHelper.
Вы можете прочитать http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::error