【发布时间】: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