YII2 Валидаторы

233
26 ноября 2018, 22:10

Не могу понять как работают валидаторы в YII, вот мне приходит пост запрос в контроллер:

public function actionAddnewserver()
{
    if (Yii::$app->request->isAjax) {
        $data = Yii::$app->request->post();    
        $server = new Server();
        $server->insertNewServer($data);
    }
} 

Перед вставкой в БД я например хочу проверить $data['url'] на валидность. В этом контроллере имеется вот такой метод:

/**
 * @return array the validation rules.
 */
public function rules()
{
    return [
        // Проверяет, что "website" является корректным URL. Добавляет http:// к атрибуту "website".
        // если у него нет URI схемы
        ['website', 'url', 'defaultScheme' => 'http', 'message' => 'ошибка'],
    ];
} 

Это все что я смог найти из документации. Как я должен понять корректен ли URL или нет? С YII работаю впервые. Ну логически я должен передать эту строку в какой нибудь булевый метод который вернул бы мне true или false а тут как вообще не понимаю.

Answer 1

Тебе нужно задать атрибут модели Server и вызвать функцию validate(), которая вернет true, если валидация прошла.

public function actionAddnewserver()
{
    if (Yii::$app->request->isAjax) {
        $data = Yii::$app->request->post();    
        $server = new Server();
        $server->website = $data['website'];
        if($server->validate()){
            $server->insertNewServer($data);
        }else{
            $errors = $server->errors;
        }
    }
}

Примерно так. Более подробно смотри тут Правила валидации

READ ALSO
Переопределить свойство объекта ActiveRecord

Переопределить свойство объекта ActiveRecord

Допустим, у меня есть 2 модели AR1

159
Запрос к БД YII2

Запрос к БД YII2

Подскажите пожалуйста, в приведенном коде, запрос к БД выполняется один раз а потом просто фильтруются данные или 2 запроса?

173
Передать значения отмеченных checkbox в url в виде get параметра

Передать значения отмеченных checkbox в url в виде get параметра

Как передать значения отмеченных checkbox в url в виде get параметра? В итоге хочу получить примерно такой url: wwwtest

171
Как загрузить офлайн-конверсии в Яндекс.метрику через php?

Как загрузить офлайн-конверсии в Яндекс.метрику через php?

В документации написано, создаем приложение, берем файл и шлем его POST`ом в яндекс и все окПробуем отправить, получаем ошибку 401, "Неавторизованный...

283