У меня было несколько проблем.Один из них - как использовать переменные в модели CakePHP.Во-вторых, как передать поля в пользовательские валидаторы другого поля, используя эти переменные.В-третьих, как передать пустые поля пользовательским валидаторам.
Ответ на первый вопрос: переопределение конструктора позволяет добавлять переменные в модель.
public function __construct($id = false, $table = null, $ds = null){
parent::__construct($id, $table, $ds);
$this->example_type_var = 1;
}
Ответ на второй вопрос: созданиенастраиваемый валидатор вашего поля, который вам нужно передать, и используйте эту функцию для его установки.Обратите внимание, что (я думаю) есть порядок, когда правила происходят.Убедитесь, что вы поместили свое пользовательское правило в качестве первого правила и поместили это поле перед вторым полем, которое необходимо для доступа к значению этого поля.
var $validate = array(
'example_type' => array(
'updateActionne' => array(
'rule' => array('_updateTheOleType')
)
)
)
Затем в пользовательском валидаторе:
function _updateTheOleType($check) {
$this->example_type_var = $check['example_type'];
return true;
}
Во втором пользовательском валидаторе снова используйте $ this-> example_type_var.Смотрите следующее:
function _exampleNotEmpty($check) {
if ($this->example_type_var === '3') {
if (empty($check['example_id']) && $check['example_id'] !== '0') {
return false;
}
}
return true;
}
Ответ на третий вопрос: я ошибочно подумал, что allowEmpty - это то, что мне нужно для передачи пустого поля в пользовательский валидатор.Это не так, как это работает.AllowEmpty, установленный в true, означает, что пустые поля возвращают true в правиле.Ваш пользовательский валидатор даже не запустится.AllowEmpty, установленный в false, означает, что пустые поля не пройдут проверку, опять же, даже не заходя в пользовательскую функцию проверки правила.Требуется правильный атрибут.Установка значения true заставляет правило всегда выполняться.
Неправильно:
var $validate = array(
'example_id' => array(
'exampleNotEmpty' => array(
'rule' => array('_exampleNotEmpty'),
'message' => 'Example ID: You must have an example ID if the event is example type.',
'allowEmpty' => true
)
)
)
Неправильно:
var $validate = array(
'example_id' => array(
'exampleNotEmpty' => array(
'rule' => array('_exampleNotEmpty'),
'message' => 'Example ID: You must have an example ID if the event is example type.',
'allowEmpty' => false
)
)
)
Правильно:
var $validate = array(
'example_id' => array(
'exampleNotEmpty' => array(
'rule' => array('_exampleNotEmpty'),
'message' => 'Example ID: You must have an example ID if the event is example type.',
'required' => true
)
)
)