@akula22

Как создать свое правило валидации в yii2?

Нужно чтобы в комментах при посте длинна одного слова не превышала 150 символов.
Создал метод для проверки на длину каждого слова в тексте, но как это прицепить к рулс не знаю
public function lognWord($text)
    {
        $word = explode(" ", $text);

        for ($i = 0; $i < sizeof($word); $i++)
        {
            $check = strlen($word[$a]);
        }
        if ($check > self::LONG_WORD) //  150
        {
            return true;
        }
        return false;
}

['post', 'longWord', 'targetClass' => 'Comments'],
ReflectionException

Class longWord does not exist
  • Вопрос задан
  • 4449 просмотров
Решения вопроса 1
iiifx
@iiifx
PHP, OOP, SOLID, Yii2, Composer, PHPStorm
['post', 'validatorLongWords'],

public function validatorLongWords ( $attribute )
{
    $parts = explode( ' ', $this->$attribute );
    foreach ( $parts as $word ) {
        if ( strlen( $word ) > static::LONG_WORD ) { # Для UTF-8 и русского текста используем mb_strlen( $word )
            $this->addError( $attribute, 'Слишком длинное слово в строке, да...' );
            break; # или return;
        }
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Как все сложно у вас. У Yii2 есть собственный валидатор строчек Документация

В Ruls просто указать
['SomeString', 'string', 'length' => [4, 150]],
/ не меньше 4, но не больше 150
Только это правило на общую длину комментария. Если вам нужно, что бы слова были не больше 150. Вам придется разбивать входящую строку на массивы слов и проверять этим валидатором.

Для выделения всей логики, и использования валидации. Можно реализовать Встроенный валидатор
Ответ написан
@kryvel
Системный администратор
Вам нужно написать свой валидатор. Вот посмотрите здесь все подробно описано
stackoverflow.com/questions/27805133/yii2-how-to-u...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы