Cakephp 验证不起作用

Cakephp validation does not work

我在 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);
    }
}

和我的模特Table:

//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');
    }
}

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

谢谢

patchEntity 将首先验证您的数据,然后才是 return 实体对象

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

您必须将命名空间添加到您的 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');
    }
}