вопрос по исключениям

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
kukuruku
Сообщения: 1298
Зарегистрирован: 2011.02.14, 11:36

вопрос по исключениям

Сообщение kukuruku »

Код: Выделить всё

 public function actionImport(){
 
try {
            throw new ErrorException('test');
        } catch (\ErrorException $e) {
            http_response_code(500);
            echo $e->getMessage();
           
        }
}
        
метод вызывается в аяксе
был удивлен что в выдачу попадает весь стек исключения, хотя я его перехватываю
плюс я получаю предупреждение Headers already sent
если добавить после echo exit; тогда все работает как мне нужно
в чем причина такого поведения?

skynin
Сообщения: 291
Зарегистрирован: 2017.12.12, 10:09

Re: вопрос по исключениям

Сообщение skynin »

-- в чем причина такого поведения?
У Yii2 классическая схема работы для зрелых фреймворков
через request-response

https://www.yiiframework.com/doc/guide/ ... -responses

А вы хотите мимо, с http_response_code, и echo

То есть, нужно либо осваивать фреймворк, либо отказываться от него.

kukuruku
Сообщения: 1298
Зарегистрирован: 2011.02.14, 11:36

Re: вопрос по исключениям

Сообщение kukuruku »

получается или делать через return $e->getMessage(); но тогда код 200 заменит мой код ошибки
или вызывать Yii::$app->response->content = $e->getMessage();

skynin
Сообщения: 291
Зарегистрирован: 2017.12.12, 10:09

Re: вопрос по исключениям

Сообщение skynin »

см документацию
1. Задача - присвоить свой код: Yii::$app->response->statusCode = 200;
2. Передать свое сообщение: Yii::$app->response->content = 'hello world!';

Хотя передача сообщения наверное нужна не такая, а страница ошибки?
Тогда правильно
return $this->render('index', [$ex => $e]);
и там оформление

-- заменит мой код ошибки
при правильном использовании средства фреймворка - ничего он не заменяет
при неправильном, да, "чудеса": " Headers already sent" и прочие "неудобства.

У меня кстати в списке вопросов для собеседования на знание фреймворка этот есть:
Что означает Headers already sent. Даже если программист на Yii2 не сталкивался - зная фреймворк догадается.

Настоятельно рекомендую потратить время и прочесть бегло, для первого раза все подряд разделы из
https://www.yiiframework.com/doc/guide/2.0/ru
от Введение, до Отображение данных. Остальные потом, они более продвинутые.

А то вы долго так будете "бороться" с фреймворком.
Без шанса на победу, фреймворк "сильнее" :)

ну и по поводу кода
actionImport(){
try {
throw new ErrorException('test');

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

kukuruku
Сообщения: 1298
Зарегистрирован: 2011.02.14, 11:36

Re: вопрос по исключениям

Сообщение kukuruku »

у меня запрос через аякс без шаблонов

Код: Выделить всё

$.post('import', {idList: idList}, function () {
            $.pjax({container: '#pjax', scrollTo: false});
        })
        .fail(function(xhr, status, error) {
            $('#error').append(xhr.responseText + '<br>');
        });

skynin
Сообщения: 291
Зарегистрирован: 2017.12.12, 10:09

Re: вопрос по исключениям

Сообщение skynin »

-- у меня запрос через аякс без шаблонов
и это отменяет изучение фреймворка?

он работает и в этом случае так же.
вы попробовали:
Yii::$app->response->statusCode = 500;

кстати, сомнительно что это правильный код ответа, для перехваченной ошибки в логике работы вернее отдавать что-то из 400ых. но не суть

Yii::$app->response->statusCode = 500;

смотрели в дев панели, получаете 500ый в браузере?

да, а базово в доке тоже есть, о нужных возможностях
https://www.yiiframework.com/doc/guide/ ... ing-errors

kukuruku
Сообщения: 1298
Зарегистрирован: 2011.02.14, 11:36

Re: вопрос по исключениям

Сообщение kukuruku »

спасибо разобрался

Ответить