CakePHP 3 – Как использовать Trim () перед проверкой NotEmpty?

Моя форма проверяет пустые поля, но если пользователь использует «пробел», валидация обрабатывает как один символ. Как использовать Trim () в Model-Table для этого не происходит?

Предположим, что у вас есть столбец заголовка в столбце Столбцы, и вы хотите убрать название перед проверкой.

введите следующий код в src \ Model \ Table \ PostsTable.php

public function beforeMarshal(Event $event, ArrayObject $data) { $data['title'] = trim($data['title']); } 

и добавьте следующие две строки вверху src \ Model \ Table \ PostsTable.php

 use Cake\Event\Event; use ArrayObject; 

благодаря

Мне нравится обрезать данные вообще для всех запросов. Это утверждает, что добавленное бессмысленное пробелы не делает валидацию нефункциональной:

 public function startup(Event $event) { // Data preparation if (!empty($this->Controller->request->data) && !Configure::read('DataPreparation.notrim')) { $this->Controller->request->data = $this->trimDeep($this->Controller->request->data); } if (!empty($this->Controller->request->query) && !Configure::read('DataPreparation.notrim')) { $this->Controller->request->query = $this->trimDeep($this->Controller->request->query); } if (!empty($this->Controller->request->params['pass']) && !Configure::read('DataPreparation.notrim')) { $this->Controller->request->params['pass'] = $this->trimDeep($this->Controller->request->params['pass']); } 

Поэтому, возможно, используйте такой компонентный крючок для очистки ваших данных до его использования в любом месте вашего контроллера или слоя модели.

Источник 2.x: https://github.com/dereuromark/cakephp-tools/blob/2.x/Controller/Component/CommonComponent.php#L45-L57

Источник 3.x: https://github.com/dereuromark/cakephp-tools/blob/master/src/Controller/Component/CommonComponent.php#L25-L34

Вы можете использовать обратный вызов beforeRules и использовать trim (), прежде чем данные будут проверены.

Вы можете использовать обратный вызов beforeRules и использовать trim (), прежде чем данные будут проверены.

Изменить: простой пример:

 public function beforeRules($event, $entity, $options, $operation){ $entity->set ('yourFieldname', trim ($entity->get ('yourFieldname'))); return parent:: beforeRules($event, $entity, $options, $operation); 

Поместите это в свой класс таблицы.