#php #cakephp #cakephp-1.3
#php #cakephp #cakephp-1.3
Вопрос:
Я работаю над формой, которая содержит пользовательские данные, в частности поле номера телефона. Номер телефона обычно не требуется, поэтому единственным правилом проверки в модели является usphone
правило. Однако, если пользователь отправляет эту форму, номер телефона становится необходимым. Я думал, что смогу просто добавить validate
правило на лету, установить модель и вызвать validates
метод, но либо я делаю это неправильно, либо это работает не так, как я ожидал.
В моем контроллере:
# Update a few validation rules that are specific to this context
$this->Proposal->Requestor->validate['phone_number']['notempty'] = array(
'rule' => 'notEmpty',
'message' => 'Please enter a phone number so can can contact you with any questions about the work.',
'allowEmpty' => false,
'required' => true,
);
$validationErrors = array();
$this->Proposal->Requestor->set( $this->data['Requestor'] ); # $this->data['Requestor']['phone_number'] only (no other requestor data)
if( !$this->Proposal->Requestor->validates( array( 'fieldList' => array( 'phone_number' ) ) ) ) {
$validationErrors['Requestor'] = $this->Proposal->Requestor->validationErrors;
}
Об ошибках не сообщается, даже если я оставляю поле номера телефона пустым. В этом случае единственная информация, которую я запрашиваю у пользователя, — это его номер телефона, поэтому остальные Requestor
данные пусты, но я попытался объединить остальные пользовательские данные, и я получаю тот же результат. Если я удалю эту fieldList
опцию, я получу сообщение об ошибке в другом поле, но по-прежнему ничего не будет в пустом номере телефона.
Есть идеи, чего мне здесь не хватает? Я возился с этим уже несколько часов и просто не нашел правильного ответа.
Спасибо.
Ответ №1:
Решение оказалось двояким:
- У меня было существующее правило для
phone_number
поля, которое заставляло значение быть номером телефона в США. Для этого правила также установленоallowEmpty
значениеtrue
иrequired
false
. Я хотел перехватить пустое значение, чтобы я мог отобразить особенно точное сообщение. - Мне пришлось обновить существующее правило, чтобы изменить
allowEmpty
значенияrequired
и, а также добавить новое правило соlast
значением, равнымtrue
.
Окончательное изменение, добавленное в мое действие контроллера, выглядит следующим образом:
$this->Proposal->Requestor->validate = Set::merge(
$this->Proposal->Requestor->validate,
array(
'phone_number' => array(
'notempty' => array(
'rule' => 'notEmpty',
'message' => 'Please enter a phone number so can can contact you with any questions about the work.',
'allowEmpty' => false,
'required' => true,
'last' => true,
),
'usphone' => array(
'allowEmpty' => false,
'required' => true,
),
)
)
);
Я не могу вспомнить, проверял ли я, что изменение существующего usphone
правила было строго необходимым, учитывая last
значение нового правила, но эта комбинация работает нормально.
Ответ №2:
Вы могли бы попробовать использовать многозначное поведение — http://bakery.cakephp.org/articles/dardosordi/2008/07/29/multivalidatablebehavior-using-many-validation-rulesets-per-model