Создание связанных моделей необязательно

#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.