【问题标题】:Declaration of validationDefault in Cakephp 4.0Cakephp 4.0 中的validationDefault 声明
【发布时间】:2020-04-14 19:37:18
【问题描述】:

我正在尝试使用 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

我的代码看不到任何明显的问题。我哪里错了?

【问题讨论】:

  • 为避免出现问题,请使用烘焙命令创建 MVC。同样在您的代码编辑器中使用 intelephense 插件可以帮助您编写代码而不会出错。
  • 我尝试这样做,但是 bake 无法连接到终端中的数据库,而且我无法调试它,所以自己构建我需要的东西似乎更快!不过还是谢谢。

标签: cakephp


【解决方案1】:

Cake 中validationDefault 函数的声明为:

public function validationDefault(Validator $validator): Validator

你的声明只是

public function validationDefault(Validator $validator)

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

【讨论】:

  • 谢谢!是的,我没有看到任何地方提到过。我会按照你的建议提出一个问题。
猜你喜欢
  • 2020-08-20
  • 2018-11-19
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多