Я хочу обновить два поля и только два поля из конкретной модели в форме. Есть много других полей в той же модели, которые будут проверены в другом месте, но эти два поля находятся в отдельной форме.
Мне нужно, чтобы они совпадали и оба присутствовали. book_name_confirm
не сохраняется в БД.
$validator
->scalar('book_name')
->maxLength('book_name', 255)
->requirePresence('book_name')
->sameAs('book_name_confirm', 'book_name', 'Book names must match')
->allowEmptyString('book_name', false);
Что, кажется, работает нормально при первоначальном создании записи ... но затем при обновлении только этих двух полей проверка не применяется.
Пример:
Назовите книгу "Пушистые зайчики" и подтвердите и просмотрите запись, созданную в базе данных. Валидация происходит, как и ожидалось - при вводе чего-либо еще на входе подтверждения возвращается установленная ошибка.
Перейти на страницу обновления названия книги.
Введите несоответствующие названия книг и отправьте, сохраняя новое название книги. Ошибка не выдана. Может видеть новое значение отображается и в БД. Выдает ли браузер ошибку «не должно быть пустым», если вы пытаетесь оставить его пустым.
Сама форма:
<?= $this->Form->create($book) ?>
<fieldset>
<?php
echo $this->Form->control('book_name');
echo $this->Form->control('book_name_confirm', array('label' => 'Confirm book name'));
?>
</fieldset>
<?= $this->Form->button(__('Set new book name')) ?>
<?= $this->Form->end() ?>
И контроллер:
if ($this->request->is(['patch', 'post', 'put'])){
//bookTracking is passed through URL, is a UUID
$bookQuery = $this->Books->find('all')
->where(["tracking =" => $bookTracking]);
$book = $bookQuery->first();
//stuff here to handle missing books
$book->book_name = $this->request->getData("book_name");
$book->book_name_confirm = $this->request->getData("book_name_confirm");
$this->Books->save($book);
//redirect
}
$book = $this->Books->newEntity();
$this->set(compact('book'));
Полагаю, я мог бы выполнить некоторую ручную проверку в контроллере, но это, казалось бы, противоречило цели настройки всей модели проверки. Чего мне не хватает?