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

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

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

Сообщение Shady » 2014.10.06, 17:08

Здравствуйте, изучаю решение следующей проблемы, при всяких разных ситуациях, может случиться так, что 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 » 2014.10.06, 17:59

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

Shady
Сообщения: 10
Зарегистрирован: 2014.08.01, 16:02

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

Сообщение Shady » 2014.10.06, 19:17

1. а как?

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

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

Сообщение Faenir » 2014.10.06, 22:14

В 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 » 2014.10.07, 13:14

Хм.. как ни странно, заменил на 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 » 2014.10.09, 03:19

подниму тему

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

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

Сообщение iAchilles » 2014.10.09, 10:09

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);     

Странник
Сообщения: 274
Зарегистрирован: 2013.04.08, 10:35
Откуда: Нижний Новгород

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

Сообщение Странник » 2014.10.09, 10:38

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

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

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

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

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

Сообщение iAchilles » 2014.10.09, 11:10

Странник писал(а): Нехороший совет.
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 » 2014.10.09, 15:39

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

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

Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

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

Сообщение anton44eg » 2014.10.09, 16:30

Так это можно подредактировать в site/error
Любой текст и вид какой вам нравится :)

Shady
Сообщения: 10
Зарегистрирован: 2014.08.01, 16:02

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

Сообщение Shady » 2014.10.11, 15:40

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

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

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

Сообщение iAchilles » 2014.10.11, 16:40

Для понимания.
Обработка ошибок
Изображение

Shady
Сообщения: 10
Зарегистрирован: 2014.08.01, 16:02

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

Сообщение Shady » 2014.10.14, 15:08

что я в итоге должен сделать чтобы пользователи сайта не видели php ошибок из-за непраивльных URLов

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

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

Сообщение Faenir » 2014.10.14, 20:36

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

Ответить