Call to a member function getImage() on a non-object

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Igor346
Сообщения: 87
Зарегистрирован: 2016.09.13, 22:59

Call to a member function getImage() on a non-object

Сообщение Igor346 » 2017.04.20, 10:13

Где я ошибся намекните пожалуйста.

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

<?php

/* @var $this yii\web\View */

use yii\helpers\Url;
use yii\helpers\Html;


?>

<div class="windows">

    <ol class="breadcrumb na">

        <li><a href="<?= Url::home()?>">Главная</a></li>
        <li><? if( $category['parent_id'] == 0):?><a href="<?= Url::to(['categories/index'])?>"><?= 'Каталог категорий' ?></a>
            <? else :?>
                <a href="<?= Url::to(['categories/view', 'id' => $category['parent_id']])?>">
                    <? foreach ($ca as $cats): ?><?= $cats['name'] ?><?endforeach;?></a>
            <? endif;?></li>
        <li><?= $category->name ?></li>

    </ol>

    <h2><?= $category->name?></h2>
    <h4><?= $category->short_text?></h4>
    <h5><?= $category->main_text?></h5>



    <? if( $category['parent_id'] == 0):?>
        <div class="block">
            <? foreach ($cat as $cats):?>
                <? $mainImg = $cats->getImage() ?>
                <div class="preview">
                    <a href="<?= Url::to(['categories/view', 'id' => $cats['id']])?>">
                        <?= Html::img($mainImg->getUrl(), ['width' => '230px']) ?></a>
                    <br><a href="<?= Url::to(['categories/view', 'id' => $cats['id']])?>" ><strong><?= $cats['name'] ?></strong></a>
                </div>
            <? endforeach; ?>
        </div>
Здесь все хорошо выводится, что и нужно.



А в этом получаю ошибку:

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

    <? else :?>


        <div class="block">
            <? foreach ($subcats as $subcat):?>
                <? $mainImg = $subcat->getImage() ?>
                <div class="preview"><a href="<?= Url::to(['series/view', 'id' => $subcat['id']])?>">
                        <?= Html::img($mainImg->getUrl(), ['width' => '230px']) ?></a>
                    <br><a href="<?= Url::to(['series/view', 'id' => $subcat['id']])?>" ><strong><?= $subcat['name'] ?></strong></a>
                </div>
            <? endforeach; ?>
        </div>
    <? endif;?>
</div>
Ошибку славливаю здесь:

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

<? $mainImg = $subcat->getImage() ?>
Контроллер:

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

namespace app\controllers;
use app\models\Categories;
use app\models\Products;
use app\models\Series;
use yii\web\HttpException;
use Yii;



class CategoriesController extends AppController
{

    public function actionIndex()
    {
        $cat = Categories::find()->where(['parent_id' => ''])->asArray()->all();
        $this->setMeta('Каталог категорий');
        return $this->render('index', compact('cat', 'category'));
    }


    public function actionView($id)
    {
        //$id = Yii::$app->request->get('id');
        $category = Categories::findOne($id);
        $categories = $category['parent_id'];
        if (empty($category))
            throw new HttpException(404, 'Такой категории нет');
        $cat = Categories::find()->where(['parent_id' => $id])->all();
        $ca = Categories::find()->where(['id' => $categories])->asArray()->all();
        $subcats = Series::find()->where(['category_id' => $id])->with('products')->asArray()->all();
        $prod = Products::find()->where(['serie_id' => $subcats])->asArray()->all();
        $this->setMeta($category->name, $category->keywords, $category->description);
        return $this->render('view', compact('id', 'cat', 'subcats', 'category', 'ca', 'prod', 'sub'));
    }

}

Модель:

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

<?php
/**
 * Created by PhpStorm.
 * User: Игорь
 * Date: 27.10.2016
 * Time: 0:19
 */

namespace app\models;


use yii\db\ActiveRecord;

class Series extends ActiveRecord
{

    public function behaviors()
    {
        return [
            'image' => [
                'class' => 'rico\yii2images\behaviors\ImageBehave',
            ]
        ];
    }

    static function tableName()
    {
        return 'series';
    }

    public function getCategories()
    {
        return $this->hasOne(Categories::className(), ['id' => 'category_id']);
    }

    public function getProducts()
    {
        return $this->hasMany(Products::className(), ['serie_id' => 'id']);
    }

    public function getSeriesColor()
    {
        return $this->hasMany(SeriesColor::className(), ['serie_id' => 'id']);
    }

    public function getColors()
    {
        return $this->hasMany(Colors::className(), ['id' => 'color_id'])->via('seriesColor');
    }
    
    public function getCountry()
    {
        return $this->hasOne(Country::className(), ['id' => 'countries']);
    }
    
    public function getCategoriesPrice()
    {
        return $this->hasOne(CategoriesPrice::className(), ['id' => 'category_price']);
    }

    public function getStyles()
    {
        return $this->hasOne(Styles::className(), ['id' => 'style']);
    }

}

someweb
Сообщения: 79
Зарегистрирован: 2017.03.09, 10:12

Re: Call to a member function getImage() on a non-object

Сообщение someweb » 2017.04.20, 10:31

Так у вас же asArray()

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

$subcats = Series::find()->where(['category_id' => $id])->with('products')->asArray()->all();

Igor346
Сообщения: 87
Зарегистрирован: 2016.09.13, 22:59

Re: Call to a member function getImage() on a non-object

Сообщение Igor346 » 2017.04.21, 00:21

Да и в $subcats не попадает image чтобы вывести его. Как правильно в этом случае поступить?

sosnovskiy
Сообщения: 239
Зарегистрирован: 2017.03.28, 20:03

Re: Call to a member function getImage() on a non-object

Сообщение sosnovskiy » 2017.04.21, 09:39

Что показывает

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

print_r($subcats);
?

Igor346
Сообщения: 87
Зарегистрирован: 2016.09.13, 22:59

Re: Call to a member function getImage() on a non-object

Сообщение Igor346 » 2017.04.21, 16:56

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

Array
(
    [0] => Array
        (
            [id] => 1
            [keywords] => 
            [description] => 
            [content] => 
Сочетание изящного внешнего вида и невысокой цены делают серию мебели Премьер одной из самых востребованных на рынке.



            [name] => Премьер
            [category_id] => 11
            [category_price] => 1
            [material] => ЛДСП, кромка 2 мм и 0,4 мм
            [style] => 1
            [thickness] => Столешницы и опоры столов - 50 мм, каркасы шкафов и тумб - 18 мм, топы тумб, боковые панели и топы шкафов - 25 мм
            [countries] => 1
            [img] => director/russia/Premier/51253.jpg
            [products] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [description] => 
                            [keywords] => 
                            [title] => 
                            [category_id] => 11
                            [serie_id] => 1
                            [color_id] => 2
                            [name] => Стол Руководителя
                            [code] => ПР 0111
                            [size] => 180*94*76
                            [price_r] => 29708.00
                            [price_e] => 
                            [product_description] => 
k,ugujmydfhl.ihkug ihkugjuhliujlih iyiugkyhlyu.liu



                            [time_delivery] => Московский склад, в течение 14 р/дней
                            [img] => director/russia/Premier/111.jpg
                            [product_group] => 1
                            [count] => 1
                        )

                   
        )

)
Последний раз редактировалось Igor346 2017.04.22, 01:13, всего редактировалось 1 раз.

someweb
Сообщения: 79
Зарегистрирован: 2017.03.09, 10:12

Re: Call to a member function getImage() on a non-object

Сообщение someweb » 2017.04.21, 17:19

Ну вы же получаете $subcats как массив, а потом обращаетесь к его элементам как к объекту. И ошибка об этом явно намекает.

Igor346
Сообщения: 87
Зарегистрирован: 2016.09.13, 22:59

Re: Call to a member function getImage() on a non-object

Сообщение Igor346 » 2017.04.21, 17:49

Подскажите как правильно обратиться?
<? $mainImg = $subcat['getImage()'] ?>
<? $mainImg = $subcat[getImage()] ?>
<? $mainImg = $subcat['image'] ?>
Не помогает. Ну или где почитать?

caHek2x
Сообщения: 1068
Зарегистрирован: 2016.04.12, 20:41

Re: Call to a member function getImage() on a non-object

Сообщение caHek2x » 2017.04.21, 17:54

это массив .... ваши ф-ции не доступны в нем ... или убирайте asArray ... или обращайтесь к тому что пришло ...
в массиве я вижу есть [img] => director/russia/Reventon/131.jpg
вам не это ли надо ?
Igor346 писал(а):
2017.04.21, 17:49
Ну или где почитать?
http://php.net/manual/ru/language.types.array.php

Igor346
Сообщения: 87
Зарегистрирован: 2016.09.13, 22:59

Re: Call to a member function getImage() on a non-object

Сообщение Igor346 » 2017.04.21, 18:29

caHek2x писал(а):
2017.04.21, 17:54
это массив .... ваши ф-ции не доступны в нем ... или убирайте asArray ... или обращайтесь к тому что пришло ...
в массиве я вижу есть [img] => director/russia/Reventon/131.jpg
вам не это ли надо ?
Igor346 писал(а):
2017.04.21, 17:49
Ну или где почитать?
http://php.net/manual/ru/language.types.array.php
Спасибо, почитаю. img мне не нужно, сейчас их добавление через CostaRico/yii2-images в таблицу images.

caHek2x
Сообщения: 1068
Зарегистрирован: 2016.04.12, 20:41

Re: Call to a member function getImage() on a non-object

Сообщение caHek2x » 2017.04.21, 19:04

ну значит заджойните таблицу и вытащите нужное значение в select

Igor346
Сообщения: 87
Зарегистрирован: 2016.09.13, 22:59

Re: Call to a member function getImage() on a non-object

Сообщение Igor346 » 2017.04.21, 19:11

Убрал asArray, посмотрю на кол-во запросов с добавлением серий, если будет очень много, то буду разбираться как таблицу заджойнить, пока не знаю как это сделать. Или вы имеете ввиду в with к 'products' добавить 'images'?

caHek2x
Сообщения: 1068
Зарегистрирован: 2016.04.12, 20:41

Re: Call to a member function getImage() on a non-object

Сообщение caHek2x » 2017.04.21, 19:38

то есть asArray по вашему нужен для уменьшения количества запросов ?
я имею ввиду именно join или joinWith ... просто with причем тут ?

Igor346
Сообщения: 87
Зарегистрирован: 2016.09.13, 22:59

Re: Call to a member function getImage() on a non-object

Сообщение Igor346 » 2017.04.21, 20:08

caHek2x писал(а):
2017.04.21, 19:38
то есть asArray по вашему нужен для уменьшения количества запросов ?
я имею ввиду именно join или joinWith ... просто with причем тут ?
Думал как раз для этого нужен asArray, ладно по мере продвижения вперёд разберусь и с join.

caHek2x
Сообщения: 1068
Зарегистрирован: 2016.04.12, 20:41

Re: Call to a member function getImage() on a non-object

Сообщение caHek2x » 2017.04.21, 20:23

без asArray вам возвращается массив обьектов AR c asArray вам возвращается просто массив строк ...
на количество запросов это не влияет ...
на используемую память влияет ...
будет замечательно если вы не будете тыкать наугад а наконец начнете знакомиться с документацией ...

sosnovskiy
Сообщения: 239
Зарегистрирован: 2017.03.28, 20:03

Re: Call to a member function getImage() on a non-object

Сообщение sosnovskiy » 2017.04.21, 20:42

Прочитайте для начала про массивы...

Igor346
Сообщения: 87
Зарегистрирован: 2016.09.13, 22:59

Re: Call to a member function getImage() on a non-object

Сообщение Igor346 » 2017.04.21, 20:46

Спасибо за ответы и рекомендации, обязательно почитаю.

Ответить