• Как поправить ajax валидацию файлов yii2?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    проблема в том, что не валидирует нормально ети поля, как исправить?

    Что конкретно не так? Забыл дома магический шар.

    Так же проверьте запрос. Если это ajax валидация, то там вряд ли передается файл, так что валидировать нечего. Повести проверку файла на клиент, 98% виджетов загрузки имеет такой функционал из коробки. Ну и придется в моделе сделать 'skipOnEmpty' =>true
    Ответ написан
    Комментировать
  • Как при ошибке сделать redirect на другой action?

    supervaleha
    @supervaleha
    Web-development
    В SiteController, при условии указания error handler на site/error

    public function actions()
        {
            return [
                'error' => [
                    // изменяем класс обработчика ошибки
                    'class' => 'frontend\components\ErrorAction',
                ],
            ];
        }


    Далее создаем сам action:

    <?php
    namespace frontend\components ;
       
    use Yii;
    use yii\helpers\Url ;
    
    class ErrorAction extends \yii\web\ErrorAction {
        public function run()
        {
            if (($exception = Yii::$app->getErrorHandler()->exception) === null) {
                $exception = new HttpException(404, Yii::t('yii', 'Page not found.'));
            }
            if ($exception instanceof HttpException) {
                $code = $exception->statusCode;
            } else {
                $code = $exception->getCode();
            }
            if ($exception instanceof Exception) {
                $name = $exception->getName();
            } else {
                $name = $this->defaultName ?: Yii::t('yii', 'Error');
            }
            if ($code) {
                $name .= " (#$code)";
            }
    
            if ($exception instanceof UserException) {
                $message = $exception->getMessage();
            } else {
                $message = $this->defaultMessage ?: Yii::t('yii', 'An internal server error occurred.');
            }
    
            if (Yii::$app->getRequest()->getIsAjax()) {
                return "$name: $message";
            } else {
                // !!!!!!!!!!!!!!!!!!!!!!! в случае необходимости редиректить один из статусо ошибки - подойдет такой вариант. В случае редиректа ВСЕХ ошибок - нужно убрать все условия и оставить лишь реирект
                if( $exception->statusCode == 404 ){
                    Yii::$app->getResponse()->redirect( Url::home(true), 301 )->send();
                    return;
                }else{
                    return $this->controller->render($this->view ?: $this->id, [
                        'name' => $name,
                        'message' => $message,
                        'exception' => $exception,
                    ]);
                }
            }
        }}
    Ответ написан
    Комментировать
  • Какая правильная структура админки yii2?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Все что можно сделать абстракцией - выносить в модули.
    Ответ написан
    Комментировать