Работа с представлениями
Работа с представлениями
Задача состоит в следующем. Есть две модели, два контроллера и 2 представления. Нужно чтобы в одном из представлений, допустим index.php отображалось второе представление index.php.
Re: Работа с представлениями
Есть виджеты, которые можно переиспользовать
Re: Работа с представлениями
Не совсем понял о чем Вы
Re: Работа с представлениями
можно и вручную файлы рендерить $view->renderFile
есть и виджеты типа content decorator - $view->beginContent
смотрите, в доках про это сказано
есть и виджеты типа content decorator - $view->beginContent
смотрите, в доках про это сказано
Re: Работа с представлениями
Пробую сделать так $this->render('/directory/create') в контроллере куда необходимо вызвать пресдавление в action необходимой страницы, но выдает ошибку undefined variable: model
Re: Работа с представлениями
Что мешает передать эту "model"?
Код: Выделить всё
$model = CoolModel::findOne(...);
$this->render('/directory/create', ['model' => $model]);
Re: Работа с представлениями
Это я сделал, но там еще куча вопросов возникает. Возможно есть какой нибудь наглядный пример рендеринга через контроллеры или виджеты, но именно с таблицами, так как обычное представление легко редерится через renderFile
Re: Работа с представлениями
В большей степени вопрос в том, что делать с переменными из той или оной таблицы ведь в ренделе они не видны
Re: Работа с представлениями
Прокинуть их в "дочернюю вьюху", как я выше уже указал. Если лениво прописывать все переменные, забабахай обычный "include", переменные будут сразу доступны.
Re: Работа с представлениями
Вопрос в том, что и include требует обозначить переменные. Поясню если кто-то не понял, что я хочу к примеру в (views/messages/view.php) отобразить (views/directory/view.php), соответственно используются разные модели и контроллеры (в двух моделях есть таблицы из базы данных) и поэтому не видит переменных.
Re: Работа с представлениями
Ну Вам и предлагают вынести запрос модели в виджет и в нём сделать render. И этот виджет в двух местах подключать.Maick писал(а): ↑2018.01.12, 09:50 Вопрос в том, что и include требует обозначить переменные. Поясню если кто-то не понял, что я хочу к примеру в (views/messages/view.php) отобразить (views/directory/view.php), соответственно используются разные модели и контроллеры (в двух моделях есть таблицы из базы данных) и поэтому не видит переменных.
Re: Работа с представлениями
Ну скорее последний оппонент предложил include поэтому я и ответил. А так да, действительно я понял что в данной ситуации лучше использовать виджеты
Re: Работа с представлениями
Создал виджет:
Вызываю его в представлении:
Выдает ошибку что неизвестен dataProvider
Притом если вызываю в виджете, php страницу без переменных типа site/about.php (без 'dataProvider' и 'searchModel'), то все работает
Код: Выделить всё
<?php
namespace app\widgets;
use yii\base\Widget;
use yii\helpers\Html;
class RenderWidgets extends Widget
{
public function run()
{
return $this->render('@app/views/directory/index.php', [
]);
}
}
Код: Выделить всё
echo RenderWidgets::widget();
Притом если вызываю в виджете, php страницу без переменных типа site/about.php (без 'dataProvider' и 'searchModel'), то все работает
Последний раз редактировалось Maick 2018.01.12, 14:56, всего редактировалось 1 раз.
- vitalik1183
- Сообщения: 1675
- Зарегистрирован: 2014.07.01, 08:42
Re: Работа с представлениями
Почему у вас dataProvider вдруг стал массивом да еще и публичным свойством?
Yii2!
Re: Работа с представлениями
Это экспериментировал, просто начало ругаться на dataProvider, решил глянуть что будет
Re: Работа с представлениями
Разобрался, оставлю текст может кому-нибудь поможет:
Код: Выделить всё
<?php
namespace app\widgets;
use Yii;
use yii\base\Widget;
use yii\helpers\Html;
use app\models\Directory;
use app\models\DirectorySearch;
class RenderWidgets extends Widget
{
public function run()
{
$searchModel = new DirectorySearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('@app/views/directory/index.php', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
}