CakePHP 3 - 如何在验证NotEmpty之前使用Trim()?

时间:2015-02-15 21:42:05

标签: php validation cakephp cakephp-3.0

我的表单验证空字段,但如果用户使用"空格",验证处理一个字符如何...如何在模型表中使用Trim()不会发生?

5 个答案:

答案 0 :(得分:5)

假设您在帖子表格中有一个标题栏,并且您想在验证前修剪标题。

将以下代码放在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;

由于

答案 1 :(得分:2)

我喜欢为所有请求修剪数据。 这断言添加的无意义空格不会使验证失效:

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

答案 2 :(得分:0)

您可以使用beforeRules回调并在验证数据之前使用trim()。

答案 3 :(得分:0)

您可以使用beforeRules回调并在验证数据之前使用trim()。

修改 一个简单的例子:

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

将它放在你的表类中。

答案 4 :(得分:0)

如果要修剪每条记录,则需要在每个模型中添加beforeMarshal

这是工作代码

// Include use statements at the top of your file.
use Cake\Event\Event;
use ArrayObject;

// In a table or behavior class
public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $options)
{
    foreach ($data as $key => $value) {
        if (is_string($value)) {
            $data[$key] = trim($value);
        }
    }
}

这是cakephp的官方参考 https://book.cakephp.org/3.0/en/orm/saving-data.html#modifying-request-data-before-building-entities