CHttpException
CHttpException
Если в Controller в методе init() кинуть CHttpException, не подцепиться layout, хотя если кинуть простой Exception layout подцепиться.
Если метод init() перенести уже в сам контролер, тогда все гуд. Не могу пойнять в чем пролема.
Если метод init() перенести уже в сам контролер, тогда все гуд. Не могу пойнять в чем пролема.
- lancecoder
- Сообщения: 2532
- Зарегистрирован: 2012.06.26, 17:16
Re: CHttpException
в подходе, код покажите
Re: CHttpException
Код: Выделить всё
<?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}
если ето перенести в любой контроллер.
Код: Выделить всё
<?php
class MainController extends Controller
{
public function init()
{
throw new CHttpException(404);
}
public function actionIndex()
{
// ...
}
}
YII_DEBUG = true - yii'шный стек трейс(все хорошо)
тоесть если унаследоваться от Controller, и в нем в методе init(), кидать исключения, отображение будет кривое.
Проверьте пожалуйста в себя, хотя я на 2 приложениях проверил.
- lancecoder
- Сообщения: 2532
- Зарегистрирован: 2012.06.26, 17:16
Re: CHttpException
извините поход у вас верен, я не знаю в чем у вас проблема в ините эксепщн это крутая идея
- lancecoder
- Сообщения: 2532
- Зарегистрирован: 2012.06.26, 17:16
Re: CHttpException
парент->инит надо передавать
Re: CHttpException
Код: Выделить всё
<?php
class Controller extends CController
{
public $layout='//layouts/column1';
public $menu=array();
public $breadcrumbs=array();
public function init()
{
parent::init();
throw new CHttpException(404);
}
}
Re: CHttpException
А как то решилась эта проблема?
наткнулся на нее
наткнулся на нее
-
- Сообщения: 1268
- Зарегистрирован: 2013.07.17, 17:37
Re: CHttpException
юзайте beforeAction, лучше после parent::beforeAction
-
- Сообщения: 1268
- Зарегистрирован: 2013.07.17, 17:37
Re: CHttpException
или найдите в коде фв момент когда Yii::app()->getController наполняется контроллером
Re: CHttpException
К сожалению эффекта не имеет.
Перерыл кучу инфы , вижу что с это проблемой сталкиваются.
Но решения нигде не нашел .
Смысл в том чтоб до всех экшенов у меня выполнилась некая проверка, и если она не прошла вызвали исключение 404 ошибка
не с помощью Инит ни Бефоэкшен - выдается стандартная ошибка а не моя вьюха для 404 ошибки...
Вобщем проблема осталась
Перерыл кучу инфы , вижу что с это проблемой сталкиваются.
Но решения нигде не нашел .
Смысл в том чтоб до всех экшенов у меня выполнилась некая проверка, и если она не прошла вызвали исключение 404 ошибка
не с помощью Инит ни Бефоэкшен - выдается стандартная ошибка а не моя вьюха для 404 ошибки...
Вобщем проблема осталась
-
- Сообщения: 1268
- Зарегистрирован: 2013.07.17, 17:37
Re: CHttpException
ну поковыряйте ацесс фильтр, он же как то кидает 403
Re: CHttpException
/**
* 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;
}
тут теперь вызывается нужное мне представление а не стандартный вывод об ошибке.
Может я все таки что то не так делаю?
* 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;
}
тут теперь вызывается нужное мне представление а не стандартный вывод об ошибке.
Может я все таки что то не так делаю?
-
- Сообщения: 1268
- Зарегистрирован: 2013.07.17, 17:37
Re: CHttpException
в лог чтото падает при ошибке?
Re: CHttpException
В лог чего? ФВ?
-
- Сообщения: 1268
- Зарегистрирован: 2013.07.17, 17:37
Re: CHttpException
runtime/application.log или при включенном дебаге что пишет? closure нет такого?
Re: CHttpException
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/
---
вот все что касаемо ошибки при выводе стандартного сообщения
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/
---
вот все что касаемо ошибки при выводе стандартного сообщения
-
- Сообщения: 1268
- Зарегистрирован: 2013.07.17, 17:37
Re: CHttpException
попробуй сделать фильтр и вынеси туда логику, по идее должно помочь, вообще runController уже устанавливает контроллер, но не понятно почему он с него лайоут не может вытащить