Вывод во view пустой результат ActiveRecord.YII2

187
08 февраля 2020, 11:50

Я только что начал изучать Yii2 и сразу столкнулся с недопониманием того, как выводить результат запроса к базе во view. Создал таблицу post и пытаюсь вытянуть из нее массив данных. Вроде все логично но не работает.
Модель: localhost\yii2-basic\models\Post.php

namespace app\models;
use yii\db\ActiveRecord;

class Post extends ActiveRecord
{
     public static function tableName()
     {
         return 'post';
     }
}

Контроллер: localhost\yii2-basic\controllers\PostController.php

namespace app\controllers;
use yii\web\Controller;
use app\models\Post;
class PostController extends Controller
{
   public function actionIndex(){
       $posts = Post::find()->all();
       return $this->render('index', compact('posts'));
   }
}

Вьюха: localhost\yii2-basic\views\post\index.php

var_dump($posts);

При попытке вывода, phpstorm уже тебе говорит что эта переменная $posts не объявлена и подчеркивает ее. Почему так происходит? Вроде контроллер должен ее рендерить во вью, но этого не происходит. Подскажите почему так происходит?

Answer 1

Шторм подчеркивает переменную во вьюхе потому что ему неизвестно какие переменные переданы во вьюху. Чтобы шторму подсказать, можно добавить комментарий в самом начале файла.

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

Теперь, если будем использовать другие вьюхи в текущей, то шторм будет знать, что $this это объект View и выдаст подсказки. Также не будет "ругаться" на переменную $posts.

Чтобы узнать почему вьюха не выводит ничего, надо в контроллере проверить, что приходит в переменную.

namespace app\controllers;
use yii\web\Controller;
use app\models\Post;
class PostController extends Controller
{
   public function actionIndex(){
       $posts = Post::find()->all();
       var_dump($posts); // смотрим, что в переменной до вьюхи.
       return $this->render('index', compact('posts'));
   }
}
READ ALSO
php структура иерархии классов Exceptions

php структура иерархии классов Exceptions

У нас в проекте установлен композер и подключен autoload по psr-4

163
Отключить алерты с исключениями opencart

Отключить алерты с исключениями opencart

Имеется уже готовый магазин на opencart 3

137
Почему не работает второй метод в Controller

Почему не работает второй метод в Controller

Каждый раз по вызывании второго метода передается html без стилейМожете сказать это с чем связано

133
Оптимизировать подзапрос в MySQL

Оптимизировать подзапрос в MySQL

Какие могут быть способы оптимизировать вот такой вот подзапрос в left join?

149