Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2014, 18:31   #1
СамСебеСамса
 
Регистрация: 19.02.2014
Сообщений: 6
По умолчанию Как обработать: Fatal error: Call to a member function asArray() on a non-object in ?

PHP код:
        $uppercats = array();
        
$parent_cats $product->category->asArray();
        
$parent_id = (int)@$parent_cats[0]['id']; 
Данный код вызывает ошибку
Цитата:
Fatal error: Call to a member function asArray() on a non-object in Z:\home\localhost\www\site\app\cont rollers\Catalog.php on line 225
в тех случаях, когда задаётся не существующий адрес товара - http://127.0.0.1/site/catalog/item/19223452341234123, к примеру такой, как сделать обработку исключения, чтобы при задании не существующего ID'a перенаправлял на главную страницу?
СамСебеСамса вне форума Ответить с цитированием
Старый 19.03.2014, 18:42   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Нужно добавить проверку объекта $product.
Если он не получает данные (товара с таким ID нет в базе) – то в этом случае выполняем редирект на Главную.
Andkorol вне форума Ответить с цитированием
Старый 19.03.2014, 19:40   #3
СамСебеСамса
 
Регистрация: 19.02.2014
Сообщений: 6
По умолчанию

я не сильно спец в php
пробовал обернуть в try catch следующим образом, чтобы отловить эксепшн, однако ничего.
Цитата:
// Upper cats
try{
$uppercats = array();
$parent_cats = $product->category->asArray();
$parent_id = (int)@$parent_cats[0]['id'];
}
catch (Exception $e){

header ('Location: http://127.0.0.1/site/catalog/');

}
if ($parent_id)
do
{
$uppercat = $this->model->product->category->getById($parent_id);
$uppercats[] = $uppercat;
$parent_id = $uppercat->parent_id;

}
СамСебеСамса вне форума Ответить с цитированием
Старый 19.03.2014, 19:52   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Проверку лучше выполнять сразу после инициализации $product.
В приведенных фрагментах кода этого места нет.
Andkorol вне форума Ответить с цитированием
Старый 21.03.2014, 16:50   #5
СамСебеСамса
 
Регистрация: 19.02.2014
Сообщений: 6
По умолчанию

А можете посмотреть где инициализация происходит?что-то я смотрел, но так и не понял: http://pastebin.com/pKy9yL8s
СамСебеСамса вне форума Ответить с цитированием
Старый 21.03.2014, 17:11   #6
ATL
Форумчанин
 
Аватар для ATL
 
Регистрация: 26.01.2007
Сообщений: 278
По умолчанию

PHP код:
// Upper cats
 
        
$uppercats = array();
        if (
is_object($product) && $product->category) {
           
$parent_cats $product->category->asArray();
           
$parent_id = (int)@$parent_cats[0]['id'];
        } else {
            
// redirect
        


Последний раз редактировалось ATL; 21.03.2014 в 17:13.
ATL вне форума Ответить с цитированием
Старый 21.03.2014, 17:14   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

158. $product = $this->model->product->getById($id);
В этой строке создается $product.
Andkorol вне форума Ответить с цитированием
Старый 21.03.2014, 18:34   #8
СамСебеСамса
 
Регистрация: 19.02.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от ATL Посмотреть сообщение
PHP код:
// Upper cats
 
        
$uppercats = array();
        if (
is_object($product) && $product->category) {
           
$parent_cats $product->category->asArray();
           
$parent_id = (int)@$parent_cats[0]['id'];
        } else {
            
// redirect
        

вставил редирект, однако при вводе неправильного ида, вместо переброса на главную страницу браузер формирует такую адресну строку

Код HTML:
http://127.0.0.1/site/catalog/item/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/127.0.0.1/site/
и выдаёт сообщение:
Цитата:
"Неверное перенаправление на странице
Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится."
СамСебеСамса вне форума Ответить с цитированием
Старый 21.03.2014, 18:41   #9
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от СамСебеСамса Посмотреть сообщение
вставил редирект
Мы должны угадать, как выглядит и работает этот ваш «редирект», и куда именно его вставили?
Andkorol вне форума Ответить с цитированием
Старый 21.03.2014, 19:19   #10
СамСебеСамса
 
Регистрация: 19.02.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Мы должны угадать, как выглядит и работает этот ваш «редирект», и куда именно его вставили?
Пробовал так:
Цитата:
$uppercats = array();
if (is_object($product) && $product->category) {
$parent_cats = $product->category->asArray();
$parent_id = (int)@$parent_cats[0]['id'];
} else {
header ("Location: 127.0.0.1/site/");
}
и так:
Цитата:
$uppercats = array();
if (is_object($product) && $product->category) {
$parent_cats = $product->category->asArray();
$parent_id = (int)@$parent_cats[0]['id'];
} else {
echo "<script>window.location.href =\"127.0.0.1/site/\" </script>";
}
результат один и тот же:

Цитата:
"Неверное перенаправление на странице
Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится."
СамСебеСамса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игра Скачки! Выдает ошибку: [Linker Fatal Error] Fatal: Expected a file name: SEV7 Общие вопросы C/C++ 0 19.05.2012 00:56
error C2668: 'sqrt' : ambiguous call to overloaded function Украина Visual C++ 3 08.01.2012 18:34
ошибка Call to a member function fetch_assoc() on a non-object Bendebej PHP 2 02.04.2010 14:04
[Linker Fatal Error] Fatal: Unable to open file 'CXGRIDVCLC6.LIB' Donn Общие вопросы C/C++ 0 16.04.2009 15:25
Fatal error: Call to undefined function mysql_connect() Air Помощь студентам 1 17.01.2009 12:41