значение checkbox value="true" , "on", "yes", "1" и т.д.
это значение передается только когда статус checked.
как корректно определить правила валидации, типа
если есть "true", отсутствует "false", "on"->"off" и т.д. ?
Page 1 of 1
валидация checkbox
#2
Posted 15 April 2009 - 05:16 PM
Задачей валидации здесь вообще и не пахнет.
Если уж так нужен подобный функционал, то можно определить свойство $checkbox в модели и написать метод getCheckBoxStatus() в той же модели. Метод нужно реализовать таким образом, что он будет возвращать заданные в нем значения в зависимости от состояния свойства. Напрямую к методу обращаться не обязательно, архитектура Yii построена так, что будет работать конструкция $status=$model->checkBoxStatus
P.S. Могу написать пример кода модели, но думаю, что стоит вообще пересмотреть этот злосчастный checkbox, потому что скорее всего такой функционал для него был бы "оверкодингом" и задача в контексте которой используется этот элемент управления на самом деле решается проще.
Если уж так нужен подобный функционал, то можно определить свойство $checkbox в модели и написать метод getCheckBoxStatus() в той же модели. Метод нужно реализовать таким образом, что он будет возвращать заданные в нем значения в зависимости от состояния свойства. Напрямую к методу обращаться не обязательно, архитектура Yii построена так, что будет работать конструкция $status=$model->checkBoxStatus
P.S. Могу написать пример кода модели, но думаю, что стоит вообще пересмотреть этот злосчастный checkbox, потому что скорее всего такой функционал для него был бы "оверкодингом" и задача в контексте которой используется этот элемент управления на самом деле решается проще.
#4
Posted 16 April 2009 - 04:35 AM
проблема с checkbox в том что если он checked,
то форма посылает значение value. в противном
случае checkbox игнорируется в меттоде POST.
т.е. что бы донести снятый флажек до базы, надо
отавливать это программно.
но в функции модели rules встречал такую
конструкцию:
[tt]array('is_active','in','range'=>array('on','off'))[/tt]
тема правил документирована слабо. вот и затаилась
надежда , что может быть можно как нить прописать
правило.
ну а пока делаю программно.
то форма посылает значение value. в противном
случае checkbox игнорируется в меттоде POST.
т.е. что бы донести снятый флажек до базы, надо
отавливать это программно.
но в функции модели rules встречал такую
конструкцию:
[tt]array('is_active','in','range'=>array('on','off'))[/tt]
тема правил документирована слабо. вот и затаилась
надежда , что может быть можно как нить прописать
правило.
ну а пока делаю программно.
#5
Posted 16 April 2009 - 01:08 PM
Позволю себе повториться, валидацией вы эту проблему не решите.
Вот реализвация предложенного мной варианта.
Все, теперь вне зависимости от того что передается в $_POST, вызов $model->checkBoxStatus даст вам то что нужно.
P.S. Хотя на мой взгляд тут вообще никакой проблемы не существует. Если задача обстоит именно таким образом, то пусть база пишет автоматически значение по умолчанию для этого поля, если checkbox не отмечен.
Вот реализвация предложенного мной варианта.
class Model extends CActiveRecord
{
function getCheckBoxStatus()
{
return isset($this->checkbox); //checkbox это то поле которое вас интересует
}
}
Все, теперь вне зависимости от того что передается в $_POST, вызов $model->checkBoxStatus даст вам то что нужно.
P.S. Хотя на мой взгляд тут вообще никакой проблемы не существует. Если задача обстоит именно таким образом, то пусть база пишет автоматически значение по умолчанию для этого поля, если checkbox не отмечен.
#6
Posted 17 April 2009 - 05:16 AM
Quote
P.S. Хотя на мой взгляд тут вообще никакой проблемы не существует. Если задача обстоит именно таким образом, то пусть база пишет автоматически значение по умолчанию для этого поля, если checkbox не отмечен.
в том то и дело что база пишет, но только на insert.
а ежели надо апдейтить? воопчим пока делаю так:
http://www.yiiframew...39.html#msg6539
#7
Posted 17 April 2009 - 10:15 PM
А что реализация метода getCheckBoxStatus() в модели не вариант? А в базу при вставках и обновлениях можно будет писать $model->checkBoxStatus, который и будет true или false, если нужно то можно и так (int) $model->checkBoxStatus
#8
Posted 18 April 2009 - 05:16 AM
Quote
А что реализация метода getCheckBoxStatus() в модели не вариант?
вариант и довольно изящный, но на форме 4 checkbox(a), + надо "парсить"
и другие поля (htmlspecialchars()). в моем случае все собрано в 1-у кучу
и работает для экшанов "add" и "edit", т.е. при myModel->save();
Share this topic:
Page 1 of 1

Help













