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

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Shady
Сообщения: 10
Зарегистрирован: 2014.08.01, 16:02

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

Сообщение 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
он всё-равно откроет страницу, а это значит что если кто-то оставит неправильную ссылку то поисковик её проиндексирует и в выдаче будет всякая хрень, хотелось бы совета.

Спасибо!
HQ0
Сообщения: 182
Зарегистрирован: 2012.10.17, 17:21

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

Сообщение HQ0 »

1. выключить дебаг и errorAction ?
2. если материала нет - отдавать 404. и поисковик даже после индекса ничего плохого не скажет.
Shady
Сообщения: 10
Зарегистрирован: 2014.08.01, 16:02

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

Сообщение Shady »

1. а как?
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

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

Сообщение 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
Shady
Сообщения: 10
Зарегистрирован: 2014.08.01, 16:02

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

Сообщение 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-го слеша грубо говоря не было? т.е. я имею введу статья/название_статьи/левак_какой_нибудь
Shady
Сообщения: 10
Зарегистрирован: 2014.08.01, 16:02

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

Сообщение Shady »

подниму тему
Аватара пользователя
iAchilles
Сообщения: 41
Зарегистрирован: 2014.09.11, 19:44

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

Сообщение 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);     
Странник
Сообщения: 289
Зарегистрирован: 2013.04.08, 10:35
Откуда: Нижний Новгород

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

Сообщение Странник »

iAchilles писал(а): Shady , закомментируйте строку

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

//defined('YII_DEBUG') or define('YII_DEBUG', false);       
Нехороший совет.
Если 'YII_DEBUG' определена в main.php, то работает первое правило (не часто).
Если нет, то второе.
Аватара пользователя
iAchilles
Сообщения: 41
Зарегистрирован: 2014.09.11, 19:44

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

Сообщение 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(); 
Shady
Сообщения: 10
Зарегистрирован: 2014.08.01, 16:02

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

Сообщение Shady »

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

Fatal error: Uncaught exception 'CHttpException' with message 'Невозможно обработать запрос "fsdf".
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

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

Сообщение anton44eg »

Так это можно подредактировать в site/error
Любой текст и вид какой вам нравится :)
Shady
Сообщения: 10
Зарегистрирован: 2014.08.01, 16:02

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

Сообщение Shady »

дык в том то и дело что это на белом фоне выдаётся, до страницы error не доходит даже дело
Аватара пользователя
iAchilles
Сообщения: 41
Зарегистрирован: 2014.09.11, 19:44

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

Сообщение iAchilles »

Для понимания.
Обработка ошибок
Изображение
Shady
Сообщения: 10
Зарегистрирован: 2014.08.01, 16:02

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

Сообщение Shady »

что я в итоге должен сделать чтобы пользователи сайта не видели php ошибок из-за непраивльных URLов
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

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

Сообщение 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% должно работать. Если не работает, вы что-то делаете не так...
Ответить