Call to a member function getImage() on null

201
07 декабря 2018, 03:10

Подскажите пожалуйста где ошибка

                <?php 
                    $mainImg = $product->getImage(); 
                ?>   
 
 
                <div class="col-sm-9 padding-right"> 
                    <?php if( !empty($hits) ): ?> 
                    <div class="features_items"><!--features_items--> 
                        <h2 class="title text-center">Хиты продаж</h2> 
                        <?php foreach ($hits as $hit): ?> 
                         
                        <div class="col-sm-4"> 
                            <div class="product-image-wrapper"> 
                                <div class="single-products"> 
                                    <div class="productinfo text-center"> 
 
                                        <?php $mainImg = $product->getImage(); ?> 
                                        <?= Html::img($mainImg->getUrl(), ['alt' => $product->name])?> 
 
                                        <?= Html::img("@web/images/products/{$hit->img}", ['alt' => $hit->name]) ?> 
                                        <h2><?= $hit->price?> руб</h2> 
                                        <p><a href="<?= \yii\helpers\Url::to(['product/view', 'id' => $hit->id]) ?>"><?= $hit->name?></a></p> 
                                        <a href="<?= \yii\helpers\Url::to(['cart/add', 'id' => $hit->id]) ?>" data-id="<?= $hit->id?>" class="btn btn-default add-to-cart"><i class="fa fa-shopping-cart"></i>В корзину</a> 
                                    </div> 
 
                                    <?php if($hit->new): ?> 
                                        <?= Html::img("@web/images/home/new.png", ['alt' => 'Новинка', 'class' => 'new']) ?> 
                                    <?php endif;?> 
 
                                    <?php if($hit->sale): ?> 
                                        <?= Html::img("@web/images/home/sale.png", ['alt' => 'Распродажа', 'class' => 'new']) ?> 
                                    <?php endif;?> 
 
                                </div> 
                                <!-- <img src="images/home/new.png" class="new" alt="" /> --> 
                                <!-- <img src="images/home/sale.png" class="new" alt="" /> --> 
                            </div> 
                        </div> 
 
                        <?php endforeach;?> 
                         
                    </div><!--features_items--> 
                <?php endif; ?> 
                     

Ошибку славливаю здесь:

<?php $mainImg = $product->getImage();?>  

Контроллер:

<?php
namespace app\controllers;
use app\models\Category;
use app\models\Product;
use Yii;
class ProductController extends AppController{
public function actionView($id){
    $id = Yii::$app->request->get('id');
    $product = Product::findOne($id);
    if(empty($product))
        throw new \yii\web\HttpException(404, 'Данного товара не существует');
    // $product = Product::find()->with('category')->where(['id' = $id])->limit(1)->one();
    $hits = Product::find()->where(['hit' => '1'])->limit(6)->all();
    $this->setMeta('ASV-PAGE | ' . $product->name, $product->keywords, $product->description);
    return $this->render('view', compact('product', 'hits'));
}

}

Модель:

<?php
namespace app\models;
use yii\db\ActiveRecord;
class Product extends ActiveRecord{
public function behaviors()
{
    return [
        'image' => [
            'class' => 'rico\yii2images\behaviors\ImageBehave',
        ]
    ];
}
public static function tableName(){
    return 'product';
}
public function getCategory() {
    return $this->hasOne(Category::className(), ['id' => 'category_id']);
}

}

Answer 1

Если вы хотите выводить картинки всех товаров в actionIndex() - тогда в нем сделайте

$products = Product::find()->all(); 
return $this->render('index', compact('products', 'hits'));

И в самом представлении делаете

<?php foreach($products as $product) { ?>
    <?= $product->getImage() ?>
<?php } ?>

Либо же, если это вывод одиночного товара - тогда уберите из вида "views\category\index.php" попытку вывода картинки, и перенесите вывод в файл, который рендерится в actionView()

READ ALSO
Как восстановить приложение?

Как восстановить приложение?

Работаю на linux, делаю приложение на yii2-advanced, локальный сервер apache2

162
Как настроить права и роли (области видимости) в Битрикс24?

Как настроить права и роли (области видимости) в Битрикс24?

В настройках прав доступа Битрикс, раздел CRM, есть Пользователь ТЕСТ с ролью Начальник Отдела

134
Создать многомерный массив в цикле

Создать многомерный массив в цикле

Допустим, имеем массив:

177
Как проверить есть ли фраза в строк php

Как проверить есть ли фраза в строк php

Проблема следующаяС помощью php мне надо определить, есть ли в строке фраза "собрать минимальный пакет"

137