#cakephp #cakephp-1.3
#cakephp #cakephp-1.3
Вопрос:
У меня есть форма, в которой пользователь может ввести адрес местоположения, а также коммунальные компании, которые предоставляют услуги по этому адресу. Служебные данные связаны со зданием:
Location hasMany Utility
name
Поле является обязательным только в контексте утилиты, поэтому проверка указывает на это. Однако в контексте местоположения любая служебная информация является необязательной. Пользователь может отказаться от ввода этих данных при вводе местоположения, что просто указывает на то, что он не хочет связывать местоположение с какой-либо или всеми коммунальными компаниями, которые мы отслеживаем.
FormHelper
Однако при использовании, проверка обнаруживается, и поле помечается как обязательное. Я хочу сохранить эту проверку для случаев, когда служебные данные вводятся независимо, но удалить требуемый индикатор в форме местоположения.
Я знаю, что могу взломать это любым количеством способов (например, удаление required
класса с помощью javascript и т.д.), Но мне интересно, есть ли чистый способ сделать это с помощью Cake API. Я не видел ничего очевидного, поэтому я надеюсь, что кто-то еще был здесь и нашел чистое и простое решение.
Спасибо.
Комментарии:
1. Не тестировал; но, возможно, вы могли бы попробовать использовать
fieldList
параметр дляvalidates()
метода… смотрите здесь . Однако может не работать со связанными данными ~
Ответ №1:
Вы можете либо спросить пользователя, сколько утилит он хочет добавить, прежде чем создавать форму, либо вы можете динамически добавлять входные данные записи утилиты с помощью js (более поздний вариант требует больше работы и не так надежен, как первый).
Пример представления (если вы хотите сделать это в 1 представлении):
if (empty($this->data){
// a form to ask how many utility records the users want to create.
}else{
// generate the form based on user input.
}
Я предполагаю, что вы знаете, что делать в контроллере.
Комментарии:
1. Похоже, это обходит FormHelper и дает мне полный контроль над
required
классом. Также я рассматривал «взлом». Я надеялся, что есть способ указатьUtility
модели отключить проверку для запроса, который рисует форму. Может быть, я могу просто изменить$validates
свойство напрямую…2. нет, вы по-прежнему используете formhelper для создания формы. Вы просто знаете, сколько записей для утилиты нужно создать при создании формы.
Ответ №2:
Я бы добавил класс к элементу формы, который является необязательным, и использовал этот класс для переопределения «требуемого» индикатора.
Комментарии:
1. Да, это один из хаков, которые я рассматриваю, но я надеялся, что есть API, о котором я не знал, чтобы сделать это чище. Спасибо.
Ответ №3:
На самом деле есть решение для Cake, используйте параметр error
$this->Form->input('Model.field', array('error' => false));
Чтобы отключить вывод сообщений об ошибках, установите для ключа ошибки значение false.