Декларация проверки по умолчанию в Cake php 4.0 - PullRequest
1 голос
/ 14 апреля 2020

Я пытаюсь создать сайт с Cake PHP 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

Я не вижу никаких очевидных проблем с моим кодом. Куда я иду не так?

1 Ответ

4 голосов
/ 14 апреля 2020

Объявление функции validationDefault в Cake:

public function validationDefault(Validator $validator): Validator

Ваше объявление просто

public function validationDefault(Validator $validator)

Вам необходимо добавить декларацию возвращаемого типа в конце, чтобы чтобы соответствовать. Документы, кажется, не упоминают об этом, вы можете поднять вопрос по этому вопросу.

...