Как в Yii2 передать параметры/переменные из вида в вид?

Как инклудить из одного view в другой разобрался. Не разобрался, как передать параметры/переменные из вида в вид?

Код приведённый ниже не работает.

$this->render('@app/views/site/index', [
    'var' => $var,
]);


Документация не помогла, возможно потому, что там часто приводится маленький кусок кода, вырванный из контекста.

1)
\Yii::$app->view->renderFile('@app/views/site/pict.php');


2) $this->render('pict');

Способами 1 и 2 инклудить файлы удалось, но без передачи переменных. Как только во второй параметр вставляешь переменные в виде массива, выдаёт ошибку

echo $this->render('pict', ['post' => $post]);

Проблема не в том, что этот момент описан в стандартной документации, а в том , что он недостаточно освещён, т.е. у нас всего лишь есть маленький кусок кода, вырванный из контекста

echo $this->render('report', [
'foo' => 1,
'bar' => 2,
]);


Я заменил данные/переменные на нужные, вместо report поставил нужный вид, из которого мне нужно эти данные/переменные взять.
Получилось:
echo $this->render('post', ['post' => $post]);

Но не работает!

Нужен листинг кода - view, из которого данные/переменные взяли и view, в который вставили.

Вот мой листинг:

Файл контроллера PictController.php (controllers/PictController.php)

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\UploadForm;
use yii\web\UploadedFile;
use yii\data\Pagination;
use app\models\Pict;
use app\models\PictForm;
use app\models\Country;
use yii\web\CookieCollection;
use yii\web\Session;
use yii\web\NotFoundHttpException;
use yii\base\Action;
use app\components\WorldAction;

class PictController extends Controller
{

public function actionIndex()
    {
$title = "Мой заголовок";
$description = "Описание страницы";
$keywords = "Ключевики";

return $this->render('index', [
		'title' => $title,
		'description' => $description,
		'keywords' => $keywords,

        ]);
    }

public function actionPost()
    {
        $post = "Запись";

        return $this->render('post', [
            'post' => $post,
        ]);
    }

}


View лежат в одной папке. Файл вида post.php (views/pict/post.php)

<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
use yii\widgets\ActiveForm;
use yii\helpers\Url;
?>

<h1><?= Html::encode($post) ?></h1>


Файл вида index.php (views/pict/index.php)

<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
use yii\widgets\ActiveForm;
use yii\helpers\Url;
?>

<?php 
$this->title=$title;
$this->registerMetaTag(['description' => $description, 'keywords' => $keywords]);
 ?>

<h1><?= Html::encode($this->title) ?></h1>

<?php echo $this->render('post', ['post' => $post]);
 ?>


Если код, отвечающий за рендеринг убрать, оба файла открываются нормально в браузере.
Текст ошибки

PHP Notice – yii\base\ErrorException

Undefined variable: post
  • Вопрос задан
  • 3971 просмотр
Пригласить эксперта
Ответы на вопрос 4
qonand
@qonand
Software Engineer
Вы пытаетесь отрендерить файл post.php из index.php передавая в него переменную $post
echo $this->render('post', ['post' => $post]);
но в сам index.php эту переменную не передаете, а нужно например:
public function actionIndex()
{
    $title = "Мой заголовок";
    $description = "Описание страницы";
    $keywords = "Ключевики";
    $post = "Запись";
    return $this->render('index', [
        'title' => $title,
        'description' => $description,
        'keywords' => $keywords,
        'post' => $post
    ]);
}
Ответ написан
AccessDenied80
@AccessDenied80
Web разработка
https://yiiframework.com.ua/ru/doc/guide/2/structu...
секция - Передача данных между видами
Этот момент описан в стандартной документации.
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
вызов из вида
echo $this->render('pict', ['post' => $post]);
работает 100%, если есть вид pict.php и если есть переменная post в виде из которого вызываете. Ошибка в другом месте и если вместо кучи ерунды, Вы таки приведете текст ошибки, то явно сможем помочь.
Ответ написан
scanderberg
@scanderberg Автор вопроса
Листинг кода уже вставил в вопрос. Проблема то в том, что и файл такой есть, и переменная нужная в нём лежит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы