Я использую CakePHP 2.3.8, и я пытаюсь выяснить, есть ли способ установить определенные правила валидации, необходимые на лету.Изменение валидации на лету в CakePHP
Например, моя модель пользователя имеет номер телефона, имя пользователя, адрес электронной почты и пароль. Если пользователь хочет изменить свое имя пользователя, их номер телефона не требуется. Это означает, что я не могу его установить, потому что тогда, когда вы меняете имя пользователя, ожидается, что в данных будет присутствовать номер телефона.
public $validate = array(
'username' => array(
'minLength' => array(
'rule' => array('minLength', '3'),
'message' => 'A username with a minimum length of 3 characters is required'
),
'unique' => array(
'rule' => 'isUnique',
'message' => 'This username has already been taken.'
)
),
'email' => array(
'email' => array(
'rule' => array('email'),
'message' => 'Please enter a valid email address.',
),
'unique' => array(
'rule' => 'isUnique',
'message' => 'This email address is already in use'
)
),
'password' => array(
'rule' => array('minLength', '8'),
'message' => 'A password with a minimum length of 8 characters is required'
),
'phone_number' => array(
'rule' => array('valid_phone'),
'message' => 'Invalid phone number',
)
);
Чтобы обойти эту проблему, в моем контроллере для соответствующего действия, что я делал это проверка, чтобы убедиться, что ожидаемые затраты были размещены. Если нет, то установите этот показатель до нуля, так что это подтверждено ... такие как
public function change_username(){
if(!isset($this->request->data['username'])){
$this->request->data['username'] = null;
}
$this->ExampleModel->set($this->request->data);
//if it wasn't posted, the username index will be created but set to null. This is my workaround for setting something to "required"
if($this->ExampleModel->validates() == true){
//do something
}
else{
//do something
}
}
В то время как это работает, я чувствую, что он делает для многих дополнительного кодирования, особенно, если у меня есть форма, которая имеет много входов.
Я также пытался проверить только те входы, которые мне нужны, но если данные не были опубликованы, они игнорируют их. Например,
if($this->ExampleModel->validates(array('fieldList' => array('phone')) == true){
.....
}
Если «телефон» не был отправлен, он не проверяет его.
Есть ли способ установить требуемое для правильности ввода данных на «на лету»? Я нашел this article, используя множество наборов правил проверки, и, хотя он будет выполнять то, что я хочу, будет много повторного кодирования.
Перед проверкой, могу ли я установить требуемый ввод?
Если показать только электронная почта поле на форме, то только электронная почта будет подтверждено .Вы не нужно беспокоиться о usename, PWD проверки –