Cakephp 4.0 中的 validationDefault 声明

Declaration of validationDefault in Cakephp 4.0

我正在尝试使用 CakePHP 4.0 创建站点,但无法使验证规则生效。我阅读了文档,但不确定应该将 validationDefault 函数放在哪里。我把它放在 UsersTable.php 中,看起来像这样:

<?php

namespace App\Model\Table;

use App\Model\Entity\User;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Rule\IsUnique;
use Cake\ORM\Table;
use Cake\Validation\Validator;

class UsersTable extends Table {

    public function initialize(array $config): void {

        $this->addBehavior('Timestamp');

        $this->hasMany('Requests')
                ->setDependent(true);

        $this->hasMany('Offers')
                ->setDependent(true);

    }

    public function validationDefault(Validator $validator) {

        $validator->notEmptyString('email', 'Please enter your email address')
                  ->notEmptyString('name', 'Please enter a name');

        return $validator;
    }
}

?>

所以我希望如果用户尝试在没有电子邮件或姓名的情况下登录,它应该会引发错误。

我的注册表格是:

        echo $this->Form->create();
        echo $this->Form->control('name');
        echo $this->Form->control('email');
        echo $this->Form->control('password', array('type' => 'password'));
        echo $this->Form->control('confirm_password', array('type' => 'password'));
        echo $this->Form->button('Register');
        echo $this->Form->end();

并将数据发送到 UsersController.php,其中包含:

public function login() {

                // Otherwise, we're registering
                $users = TableRegistry::getTableLocator()->get('Users');
                $user = $users->newEntity($this->request->getData());
                if ($users->save($user)) {
                    $result = $this->Authentication->getResult();
                    if ($result->isValid()) {
                        $target = '/users/home';
                        return $this->redirect($target);
                    }
                }else {
                    $this->Flash->error('Please fix errors below');
                }
                exit;
            }

        }

    }

当我尝试在不输入姓名和电子邮件的情况下进行注册时,收到以下错误消息:

Fatal error: Declaration of App\Model\Table\UsersTable::validationDefault(Cake\Validation\Validator $validator) must be compatible with Cake\ORM\Table::validationDefault(Cake\Validation\Validator $validator): Cake\Validation\Validator in /Applications/MAMP/htdocs/src/Model/Table/UsersTable.php on line 26

我的代码没有发现任何明显的问题。我哪里错了?

Cake中validationDefault函数的声明是:

public function validationDefault(Validator $validator): Validator

你的声明只是

public function validationDefault(Validator $validator)

需要在末尾添加return类型声明才能匹配。文档似乎没有提到这一点,您可能想就此提出问题。