Работа с представлениями

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Maick
Сообщения: 40
Зарегистрирован: 2018.01.04, 12:06

Работа с представлениями

Сообщение Maick »

Задача состоит в следующем. Есть две модели, два контроллера и 2 представления. Нужно чтобы в одном из представлений, допустим index.php отображалось второе представление index.php.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Работа с представлениями

Сообщение SiZE »

Есть виджеты, которые можно переиспользовать ;)
Maick
Сообщения: 40
Зарегистрирован: 2018.01.04, 12:06

Re: Работа с представлениями

Сообщение Maick »

Не совсем понял о чем Вы
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Работа с представлениями

Сообщение maleks »

можно и вручную файлы рендерить $view->renderFile
есть и виджеты типа content decorator - $view->beginContent
смотрите, в доках про это сказано
Maick
Сообщения: 40
Зарегистрирован: 2018.01.04, 12:06

Re: Работа с представлениями

Сообщение Maick »

Пробую сделать так $this->render('/directory/create') в контроллере куда необходимо вызвать пресдавление в action необходимой страницы, но выдает ошибку undefined variable: model
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Работа с представлениями

Сообщение Nex-Otaku »

Что мешает передать эту "model"?

Код: Выделить всё

$model = CoolModel::findOne(...);
$this->render('/directory/create', ['model' => $model]);
Maick
Сообщения: 40
Зарегистрирован: 2018.01.04, 12:06

Re: Работа с представлениями

Сообщение Maick »

Это я сделал, но там еще куча вопросов возникает. Возможно есть какой нибудь наглядный пример рендеринга через контроллеры или виджеты, но именно с таблицами, так как обычное представление легко редерится через renderFile
Maick
Сообщения: 40
Зарегистрирован: 2018.01.04, 12:06

Re: Работа с представлениями

Сообщение Maick »

В большей степени вопрос в том, что делать с переменными из той или оной таблицы ведь в ренделе они не видны
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Работа с представлениями

Сообщение Nex-Otaku »

Прокинуть их в "дочернюю вьюху", как я выше уже указал. Если лениво прописывать все переменные, забабахай обычный "include", переменные будут сразу доступны.
Maick
Сообщения: 40
Зарегистрирован: 2018.01.04, 12:06

Re: Работа с представлениями

Сообщение Maick »

Вопрос в том, что и include требует обозначить переменные. Поясню если кто-то не понял, что я хочу к примеру в (views/messages/view.php) отобразить (views/directory/view.php), соответственно используются разные модели и контроллеры (в двух моделях есть таблицы из базы данных) и поэтому не видит переменных.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Работа с представлениями

Сообщение ElisDN »

Maick писал(а): 2018.01.12, 09:50 Вопрос в том, что и include требует обозначить переменные. Поясню если кто-то не понял, что я хочу к примеру в (views/messages/view.php) отобразить (views/directory/view.php), соответственно используются разные модели и контроллеры (в двух моделях есть таблицы из базы данных) и поэтому не видит переменных.
Ну Вам и предлагают вынести запрос модели в виджет и в нём сделать render. И этот виджет в двух местах подключать.
Maick
Сообщения: 40
Зарегистрирован: 2018.01.04, 12:06

Re: Работа с представлениями

Сообщение Maick »

Ну скорее последний оппонент предложил include поэтому я и ответил. А так да, действительно я понял что в данной ситуации лучше использовать виджеты
Maick
Сообщения: 40
Зарегистрирован: 2018.01.04, 12:06

Re: Работа с представлениями

Сообщение Maick »

Создал виджет:

Код: Выделить всё

<?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();
Выдает ошибку что неизвестен dataProvider

Притом если вызываю в виджете, php страницу без переменных типа site/about.php (без 'dataProvider' и 'searchModel'), то все работает
Последний раз редактировалось Maick 2018.01.12, 14:56, всего редактировалось 1 раз.
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Работа с представлениями

Сообщение vitalik1183 »

Почему у вас dataProvider вдруг стал массивом да еще и публичным свойством?
Yii2!
Maick
Сообщения: 40
Зарегистрирован: 2018.01.04, 12:06

Re: Работа с представлениями

Сообщение Maick »

Это экспериментировал, просто начало ругаться на dataProvider, решил глянуть что будет
Maick
Сообщения: 40
Зарегистрирован: 2018.01.04, 12:06

Re: Работа с представлениями

Сообщение Maick »

Разобрался, оставлю текст может кому-нибудь поможет:

Код: Выделить всё

<?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,
        ]);
    }
}
Ответить