Как инклудить из одного 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