Cakephp验证不起作用

时间:2018-07-10 13:42:14

标签: php cakephp cakephp-3.0

我在Cakephp 3.6下无法进行表单验证

在旧版本的CakePHP上验证不是问题,但是无法通过模型验证我的表单。 我按照不同站点的教程进行操作,在论坛上查看,任何解决方案均无效。 如果我没记错的话,在我看来,在CakePHP 3的第一个版本中,验证是在保存时进行的,即使没有输入任何数据,我也会进行保存而没有任何值。 ..

我的观点:

// src / Template / Users / Register.ctp

<div class="wrapper">
    <div id="register-box">
        <div class="form-register">
            <h2 class="title">Inscription</h2>
            <?php
            echo $this->Form->create();
            echo $this->Form->control('email',[
                'label'         => false,
                'placeholder'   => 'Adresse email',
                'class'         => 'form-control',
                //'required'      => true
            ]);

            echo $this->Form->control('username',[
                'label'         => false,
                'placeholder'   => 'Nom d\'utilisateur',
                'class'         => 'form-control',
            ]);

            echo '<div class="form-group">';
            echo $this->Form->control('lastname',[
                'label'         => false,
                'placeholder'   => 'Nom',
                'class'         => 'form-control w-50',
            ]);

            echo $this->Form->control('firstname',[
                'label'         => false,
                'placeholder'   => 'Prénom',
                'class'         => 'form-control w-50',
            ]);
            echo '</div>';

            echo $this->Form->control('password',[
                'label'         => false,
                'placeholder'   => 'Mot de passe',
                'class'         => 'form-control',
            ]);

            echo $this->Form->select('type',
                [
                    1           => 'Prestataire',
                    2           => 'Client'
                ],
                [
                    'empty'     => 'Quel type de compte ?',
                    'class'     => 'form-control',
                ]);

            echo $this->Form->button('Suivant', ['class'    => 'btn btn-red']);
            echo $this->Form->end();
            ?>
        </div>
    </div>
</div>

我的控制器:

// src / Controller / UsersController.php

<?php
namespace App\Controller;

use App\Controller\AppController;
use Cake\Validation\Validator;

class UsersController extends AppController {
    public function register() {
        $user = $this->Users->newEntity();
        if($this->request->is('post')) {
            $user = $this->Users->patchEntity($user, $this->request->getData());
            if($this->Users->save($user)) {
                echo "ok";
            } else {
                echo "KO";
            }

        }
        $this->set('user', $user);
    }
}

和我的模型表:

// src / Model / Table / UsersTable.php

<?php
use Cake\ORM\Table;
use Cake\Validation\Validator;
class UsersTable extends Table {

    public function initialize(array $config) {
        $this->addBehavior('Timestamp');
    }

    public function validationDefault(Validator $validator)
    {
        return $validator
            ->notEmpty('username', "Un nom d'utilisateur est nécessaire")
            ->notEmpty('password', 'Un mot de passe est nécessaire');
    }
}

关于如何在用户注册上应用验证的想法?

谢谢

2 个答案:

答案 0 :(得分:2)

您必须将名称空间添加到您的UsersTable

<?php
namespace App\Model\Table; /// <<< add this line

use Cake\ORM\Table;
use Cake\Validation\Validator;

class UsersTable extends Table
{

    public function initialize(array $config)
    {
        $this->addBehavior('Timestamp');
    }

    public function validationDefault(Validator $validator)
    {
        return $validator
            ->notEmpty('username', "Un nom d'utilisateur est nécessaire")
            ->notEmpty('password', 'Un mot de passe est nécessaire');
    }
}

答案 1 :(得分:0)

patchEntity将首先验证您的数据,然后才返回Entity对象

来源:https://book.cakephp.org/3.0/en/orm/saving-data.html#validation-and-patchentity