Cakephp 3.x создание и использование пользовательских правил проверки
В пользовательских правилах проверки cakephp3:
Как использовать метод глобальной проверки функций.
$validator->add('title', 'custom', [
'rule' => 'validate_title'
]);
Пожалуйста, кто-нибудь делал раньше? Пожалуйста, предоставьте мне некоторые примеры программы.
Http://book.cakephp.org/3.0/en/core-libraries/validation.html#custom-validation-rules
Я пробовал выше, но это не работает..?
4 ответа:
Вот пример проверки с использованием концепции глобальной функции:
namespace App\Model\Table; use Cake\ORM\Table; use Cake\Validation\Validator; public function validationDefault(Validator $validator) { $validator->add('title',[ 'notEmptyCheck'=>[ 'rule'=>'notEmptyCheck', 'provider'=>'table', 'message'=>'Please enter the title' ] ]); return $validator; } public function notEmptyCheck($value,$context){ if(empty($context['data']['title'])) { return false; } else { return true; } }
<?php namespace App\Model\Table; use App\Model\Entity\Member; use Cake\ORM\Query; use Cake\ORM\RulesChecker; use Cake\ORM\Table; use Cake\Validation\Validator; class MembersTable extends Table { public function initialize(array $config) { parent::initialize($config); $this->table('members'); } public function validationDefault(Validator $validator) { $validator ->add("cedula", [ "custom" => [ "rule" => [$this, "customFunction"], //add the new rule 'customFunction' to cedula field "message" => "Enter the value greater than 1000" ] ] ) ->notEmpty('cedula'); return $validator; } public function customFunction($value, $context) { return $value > 1000; } } Use $context variable to comare current value with other fields like $value >= $context['data']['another_field_name']; ?>
Использовать $переменную контекста, comare текущее значение в других областях, как значение $ > = $контекст['данных']['another_field_name'];
Это действительно работает для меня (Cakephp 3.икс). Это хороший способ, если ваше состояние простое:
<?php namespace App\Form; use Cake\Form\Form; use Cake\Validation\Validator; class addPostForm extends Form { protected function _buildValidator(Validator $validator) { return $validator->allowEmpty('my_input', function ($context) { return (@context['data']['an_other_input'] != ""); }); } public function setErrors($errors) { $this->_errors = $errors; } }
Здесь вход формы
my_input
пуст только в том случае, если второй входan_other_input
завершен. Вы можете получить данные формы с переменной$context['data']
.
Вот пример для проверки.
В вашей таблице.
public function validationDefault(Validator $validator) { $validator = new Validator(); $validator ->notEmpty('username', 'A username is required') ->add('username', [ 'emailValid' => [ 'rule' => ['email', true], 'message' => 'You must provide a valid email' ], 'emailUnique' => [ 'message' => 'The email you provided is already taken. Please provide another one.', 'rule' => 'validateUnique', 'provider' => 'table' ] ]); return $validator; }