CHttpException

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
chandler
Сообщения: 145
Зарегистрирован: 2011.10.13, 21:33

CHttpException

Сообщение chandler »

Если в Controller в методе init() кинуть CHttpException, не подцепиться layout, хотя если кинуть простой Exception layout подцепиться.
Если метод init() перенести уже в сам контролер, тогда все гуд. Не могу пойнять в чем пролема.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: CHttpException

Сообщение lancecoder »

в подходе, код покажите
chandler
Сообщения: 145
Зарегистрирован: 2011.10.13, 21:33

Re: CHttpException

Сообщение chandler »

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

<?php

class Controller extends CController
{
    public $layout='//layouts/column1';

    public $menu=array();

    public $breadcrumbs=array();

    public function init()
    {
        throw new CHttpException(404);
    }
}
 
результат

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

CHttpException

(/var/www/magaz/protected/components/Controller.php:13)

#0 /var/www/magaz/framework/web/CWebApplication.php(282): Controller->init()
#1 /var/www/magaz/framework/base/CErrorHandler.php(332): CWebApplication->runController('site/error')
#2 /var/www/magaz/framework/base/CErrorHandler.php(205): CErrorHandler->render('error', Array)
#3 /var/www/magaz/framework/base/CErrorHandler.php(130): CErrorHandler->handleException(Object(CHttpException))
#4 /var/www/magaz/framework/base/CApplication.php(713): CErrorHandler->handle(Object(CExceptionEvent))
#5 [internal function]: CApplication->handleException(Object(CHttpException))
#6 {main}
 
тоесть просто текст, если YII_DEBUG = true, а при YII_DEBUG = false - просто "CHttpException" на белой странице
если ето перенести в любой контроллер.

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

<?php

class MainController extends Controller
{
    public function init()
    {
        throw new CHttpException(404);
    }
    public function actionIndex()
    {
        // ...
    }
}
 
YII_DEBUG = false - подцепляеться main.php
YII_DEBUG = true - yii'шный стек трейс(все хорошо)


тоесть если унаследоваться от Controller, и в нем в методе init(), кидать исключения, отображение будет кривое.
Проверьте пожалуйста в себя, хотя я на 2 приложениях проверил.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: CHttpException

Сообщение lancecoder »

извините поход у вас верен, я не знаю в чем у вас проблема в ините эксепщн это крутая идея
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: CHttpException

Сообщение lancecoder »

парент->инит надо передавать
chandler
Сообщения: 145
Зарегистрирован: 2011.10.13, 21:33

Re: CHttpException

Сообщение chandler »

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

<?php

class Controller extends CController
{
    public $layout='//layouts/column1';

    public $menu=array();

    public $breadcrumbs=array();

    public function init()
    {
        parent::init();
        throw new CHttpException(404);
    }
}
 
неа :( .
AlexGas
Сообщения: 24
Зарегистрирован: 2013.05.13, 22:55

Re: CHttpException

Сообщение AlexGas »

А как то решилась эта проблема? :)
наткнулся на нее
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: CHttpException

Сообщение lancedevnull »

юзайте beforeAction, лучше после parent::beforeAction
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: CHttpException

Сообщение lancedevnull »

или найдите в коде фв момент когда Yii::app()->getController наполняется контроллером
AlexGas
Сообщения: 24
Зарегистрирован: 2013.05.13, 22:55

Re: CHttpException

Сообщение AlexGas »

К сожалению эффекта не имеет.
Перерыл кучу инфы , вижу что с это проблемой сталкиваются.
Но решения нигде не нашел :(.

Смысл в том чтоб до всех экшенов у меня выполнилась некая проверка, и если она не прошла вызвали исключение 404 ошибка
не с помощью Инит ни Бефоэкшен - выдается стандартная ошибка а не моя вьюха для 404 ошибки...
Вобщем проблема осталась
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: CHttpException

Сообщение lancedevnull »

ну поковыряйте ацесс фильтр, он же как то кидает 403
AlexGas
Сообщения: 24
Зарегистрирован: 2013.05.13, 22:55

Re: CHttpException

Сообщение AlexGas »

/**
* Denies the access of the user.
* This method is invoked when access check fails.
* @param IWebUser $user the current user
* @param string $message the error message to be displayed
*/
protected function accessDenied($user,$message)
{
if($user->getIsGuest())
$user->loginRequired();
else
throw new CHttpException(403,$message);
}

да вот так и кидает.
вобщем пока определил переменную
а уже в основном контроллере ее проверяю - если она поднята - вызываю 404. (криво но не нашел как решить)

если что
у меня class FrontController extends CController
в нем инит, в котором и проверяется необходимое мне условие при не выполнении которого и должна пойти ошибка 404 (она и идет но в стандартном выводе)
Теперь вместо вызова исключения по throw new CHttpException(404,"Запрашиваемой страницы не существует!");
стоит $this->errorSet = true;
Все последующие контроллеры наследуются от него
SpecialoffersController extends FrontController
вставил
public function beforeAction($action) {
parent::beforeAction($action);

if ($this->errorSet) {
throw new CHttpException(404,"Запрашиваемой страницы не существует!");
}
return true;
}
тут теперь вызывается нужное мне представление а не стандартный вывод об ошибке.
Может я все таки что то не так делаю?
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: CHttpException

Сообщение lancedevnull »

в лог чтото падает при ошибке?
AlexGas
Сообщения: 24
Зарегистрирован: 2013.05.13, 22:55

Re: CHttpException

Сообщение AlexGas »

В лог чего? ФВ?
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: CHttpException

Сообщение lancedevnull »

runtime/application.log или при включенном дебаге что пишет? closure нет такого?
AlexGas
Сообщения: 24
Зарегистрирован: 2013.05.13, 22:55

Re: CHttpException

Сообщение AlexGas »

2014/01/15 14:41:30 [error] [exception.CHttpException.404] exception 'CHttpException' with message 'Запрашиваемой страницы не существует!' in E:\OpenServer\domains\******.tst\www\protected\components\FrontController.php:46
Stack trace:
#0 E:\OpenServer\framework\web\CWebApplication.php(281): FrontController->init()
#1 E:\OpenServer\framework\web\CWebApplication.php(141): CWebApplication->runController('specialoffers/a...')
#2 E:\OpenServer\framework\base\CApplication.php(180): CWebApplication->processRequest()
#3 E:\OpenServer\domains\******.tst\www\index.php(20): CApplication->run()
#4 {main}
REQUEST_URI=/special-offers/land-rover/309-avto-alea-prinimaet-zakazy-na-land-rover-defender-rockwall/
---
вот все что касаемо ошибки при выводе стандартного сообщения
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: CHttpException

Сообщение lancedevnull »

попробуй сделать фильтр и вынеси туда логику, по идее должно помочь, вообще runController уже устанавливает контроллер, но не понятно почему он с него лайоут не может вытащить
Ответить