Страница 1 из 1

Ошибки в системе

Добавлено: 2014.10.06, 17:08
Shady
Здравствуйте, изучаю решение следующей проблемы, при всяких разных ситуациях, может случиться так, что url окажется вида http://localhost/yii/43u8fghrudhugfh78h7
в таком случае получаю
Fatal error: Uncaught exception 'CHttpException' with message 'Невозможно обработать запрос "fsdfdf".' in D:\Server\www\yii\framework\web\CWebApplication.php:286 Stack trace: #0 D:\Server\www\yii\framework\web\CWebApplication.php(141): CWebApplication->runController('fsdfdf') #1 D:\Server\www\yii\framework\base\CApplication.php(180): CWebApplication->processRequest() #2 D:\Server\www\yii\index.php(16): CApplication->run() #3 {main} thrown in D:\Server\www\yii\framework\web\CWebApplication.php on line 286
Собственно вопрос, чтобы пользователи не видели таких нюансов, как перенаправить на 404

И есть ещё один момент, делаю чпу средствами движка, добавил правило '/статьи/<url>/<suburl>' => 'site/articles',
правильным url'ом для этого правило будет вид site.ru/статьи/отдых-в-европе/ НО если предположим ввести такой адрес site.ru/статьи/отдых-в-европе/123/123/123/123
он всё-равно откроет страницу, а это значит что если кто-то оставит неправильную ссылку то поисковик её проиндексирует и в выдаче будет всякая хрень, хотелось бы совета.

Спасибо!

Re: Ошибки в системе

Добавлено: 2014.10.06, 17:59
HQ0
1. выключить дебаг и errorAction ?
2. если материала нет - отдавать 404. и поисковик даже после индекса ничего плохого не скажет.

Re: Ошибки в системе

Добавлено: 2014.10.06, 19:17
Shady
1. а как?

Re: Ошибки в системе

Добавлено: 2014.10.06, 22:14
Faenir
В index.php заменить true на false

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

defined('YII_DEBUG') or define('YII_DEBUG', false);
В конфиге настроить:

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

'errorHandler' => [
    'errorAction' => 'site/error',
], 
и создать в SiteController -> actionError()

http://www.yiiframework.com/doc/guide/1 ... rror#sec-4

Re: Ошибки в системе

Добавлено: 2014.10.07, 13:14
Shady
Хм.. как ни странно, заменил на false, всё остальное уже есть и в контроллере и сам файл, но ошибку я досихпор вижу
Fatal error: Uncaught exception 'CHttpException' with message 'Невозможно обработать запрос "fsdfdf".' in D:\Server\www\yii\framework\web\CWebApplication.php:286 Stack trace: #0 D:\Server\www\yii\framework\web\CWebApplication.php(141): CWebApplication->runController('fsdfdf') #1 D:\Server\www\yii\framework\base\CApplication.php(180): CWebApplication->processRequest() #2 D:\Server\www\yii\index.php(16): CApplication->run() #3 {main} thrown in D:\Server\www\yii\framework\web\CWebApplication.php on line 286
А по поводу 2-й проблемы, как уже писал что вывод страниц сделан через routes правила,
для вывода ошибки мне нужно анализировать каждый раз полностью url и следить за тем чтобы 3-го слеша грубо говоря не было? т.е. я имею введу статья/название_статьи/левак_какой_нибудь

Re: Ошибки в системе

Добавлено: 2014.10.09, 03:19
Shady
подниму тему

Re: Ошибки в системе

Добавлено: 2014.10.09, 10:09
iAchilles
MrArthur писал(а):В index.php заменить true на false

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

defined('YII_DEBUG') or define('YII_DEBUG', false); 
А смысл? В данном случае (если 'YII_DEBUG' уже определена ранее) or безразличен к значению второго операнда. define('YII_DEBUG', false) - никогда не будет вызвана.

Shady , закомментируйте строку

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

//defined('YII_DEBUG') or define('YII_DEBUG', false);     

Re: Ошибки в системе

Добавлено: 2014.10.09, 10:38
Странник
iAchilles писал(а): Shady , закомментируйте строку

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

//defined('YII_DEBUG') or define('YII_DEBUG', false);       
Нехороший совет.
Если 'YII_DEBUG' определена в main.php, то работает первое правило (не часто).
Если нет, то второе.

Re: Ошибки в системе

Добавлено: 2014.10.09, 11:10
iAchilles
Странник писал(а): Нехороший совет.
8-) Эта константа по умолчанию определена в Yii и ее значение - false. Нет абсолютно никакого смысла, устанавливать ее вновь в false. А то, что у вас определено в main.php (конфигурационном файле приложения), вообще не оказывает никакого действия на

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

defined('YII_DEBUG') or define('YII_DEBUG', false);  
т.к., используется main.php, при создании экземпляра приложения на последнем этапе в index.php

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

$configFile='path/to/config/file.php';
Yii::createWebApplication($configFile)->run();
 
Так, что мой совет - закомментировать данную строку в точке входа эквивалентен поведению YII, которое определено по умолчанию, т.е. работе в продакшн режиме.

Наглядный пример, index.php:

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

//Вы предлагаете установить значение константы в false
defined('YII_DEBUG') or define('YII_DEBUG', false); //Okay установили
// подключаем файл инициализации Yii
require_once('path/to/yii/framework/yii.php'); // Теперь подключается файл YiiBase, в котором дублируется предложенный вами код: defined('YII_DEBUG') or define('YII_DEBUG',false); Смысл?
// создаем экземпляр приложения и запускаем его
$configFile='path/to/config/file.php';
Yii::createWebApplication($configFile)->run(); 

Re: Ошибки в системе

Добавлено: 2014.10.09, 15:39
Shady
Закомментировать то в итоге эту строку где? в index.php? если да то закоментил, по прежнему вижу ошибку

Fatal error: Uncaught exception 'CHttpException' with message 'Невозможно обработать запрос "fsdf".

Re: Ошибки в системе

Добавлено: 2014.10.09, 16:30
anton44eg
Так это можно подредактировать в site/error
Любой текст и вид какой вам нравится :)

Re: Ошибки в системе

Добавлено: 2014.10.11, 15:40
Shady
дык в том то и дело что это на белом фоне выдаётся, до страницы error не доходит даже дело

Re: Ошибки в системе

Добавлено: 2014.10.11, 16:40
iAchilles
Для понимания.
Обработка ошибок
Изображение

Re: Ошибки в системе

Добавлено: 2014.10.14, 15:08
Shady
что я в итоге должен сделать чтобы пользователи сайта не видели php ошибок из-за непраивльных URLов

Re: Ошибки в системе

Добавлено: 2014.10.14, 20:36
Faenir
iAchilles писал(а):
MrArthur писал(а):В index.php заменить true на false

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

defined('YII_DEBUG') or define('YII_DEBUG', false); 
А смысл? В данном случае (если 'YII_DEBUG' уже определена ранее) or безразличен к значению второго операнда. define('YII_DEBUG', false) - никогда не будет вызвана.
Как бы в YiiBase тоже идет проверка на defined... а то, что написал я - идет перед запуском приложения. Так что все будет работать;)

Можно конечно и явно прописать

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

define('YII_DEBUG', false);
Shady,
Удалите YII_DEBUG из index.php или установите его в define('YII_DEBUG', false); и настройте свой обработчик ошибок, например так:
https://github.com/yupe/yupe/blob/maste ... er.php#L41
https://github.com/yupe/yupe/blob/maste ... /error.php
и в конфиге настройте его:

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

'errorHandler'  => array(
    'errorAction' => 'site/error',
),
Это 100% должно работать. Если не работает, вы что-то делаете не так...