как использовать validationDefault () в торте php 4 - PullRequest
0 голосов
/ 06 мая 2020

Как я могу изменить этот код на основании этого вопроса?

  1. Имя пользователя может принимать только символы и цифры (без специальных символов)

  2. Пароль должен соответствовать следующим правилам: i. По крайней мере 1 номер ii. Как минимум 1 заглавная буква iii. Минимум 1 строчная буква iv. Минимум 1 специальный символ


 /**
     * Default validation rules.
     *
     * @param \Cake\Validation\Validator $validator Validator instance.
     * @return \Cake\Validation\Validator
     */
    public function validationDefault(Validator $validator): Validator
    {
        $validator
            ->nonNegativeInteger('id')
            ->allowEmptyString('id', null, 'create');

        $validator
            ->scalar('username')
            ->maxLength('username', 12)
            ->requirePresence('username', 'create')
            ->notEmptyString('username');

        $validator
            ->scalar('password')
            ->maxLength('password', 255)
            ->requirePresence('password', 'create')
            ->notEmptyString('password');

        $validator
            ->email('email')
            ->requirePresence('email', 'create')
            ->notEmptyString('email');

        $validator
            ->scalar('role')
            ->maxLength('role', 20)
            ->allowEmptyString('role');

        return $validator;
    }

    /**
     * Returns a rules checker object that will be used for validating
     * application integrity.
     *
     * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
     * @return \Cake\ORM\RulesChecker
     */
    public function buildRules(RulesChecker $rules): RulesChecker
    {
        $rules->add($rules->isUnique(['username']));
        $rules->add($rules->isUnique(['email']));

        return $rules;
    }


1 Ответ

2 голосов
/ 06 мая 2020

Документация по добавлению правил проверки не включает список готовых функций, а скорее ссылается на документацию API . Предположительно, вы хотите использовать имя пользователя alphaNumeric, вы заменяете ->scalar('username') на ->alphaNumeric('username').

Нет встроенной проверки, которая соответствует тому, что вы хотите от паролей, поэтому вы ' Придется написать настраиваемое правило проверки . Вы увидите, что здесь есть разные варианты; Самый простой, вероятно, использовать закрытие. Вместо ->scalar('password') вы должны использовать

->add('password', 'custom', [
    'rule' => function ($value, $context) {
        // Custom logic that returns true/false; the password will be in the $value
    },
    'message' => 'Password must contain ...'
])
...