anton_reut
@anton_reut
Начинающий веб-разработчик

Yii2 — Как вывести модуль во View главной страницы?

Читаю официальную доку по Yii2 что касается Модулей: https://www.yiiframework.com/doc/guide/2.0/ru/stru... В принципе всё понятно и логично, но учитывая предыдущий опыт работы с CMS-ками сразу возникло острое желание слепить тестовый модуль и вывести его например в сайтбаре главной страницы:

5de422a86e561010871003.jpeg

И вот тут возник затык, как вывести его в "чужом" экшене чужого контроллера, если модуль это "законченные программные блоки, состоящие из моделей, представлений, контроллеров и других вспомогательных компонентов."?

По ссылке вида www.site.ru/samplemodule модуль открывается, всё ок, какие есть способы интегрировать его скажем в www.site.ru/index? если у модуля своя вьюха, контроллер и даже модель. Или придется все подобные штуки делать виджетами?

Сейчас мысль такая - в методе контроллера Главной страницы вызвать объект Модуля, провести все стадии работы его методов вплоть до render() но в конце упаковать всё в переменную $module и отправить её во вьюху Главной страницы с другими данными.

Если грубо:

namespace app\controllers;
use app\modules\banner\Banner;

class SiteController extends Controller
{

	public function actionIndex(){

		$banner = new Banner();
		$data = 'Lorem ipsum...';

		return $this->render('index', [
            'banner' => $banner,
            'data' => $data,
        ])
	}

}


namespace app\modules\banner;

class Banner extends \yii\base\Module
{
   
    public $controllerNamespace = 'app\modules\banner\controllers';
    public function init()
    {
        parent::init();
    }
}



namespace app\modules\banner\controllers;
use yii\web\Controller;

class DefaultController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
}
  • Вопрос задан
  • 272 просмотра
Пригласить эксперта
Ответы на вопрос 1
mosesfender
@mosesfender
Меланхолик, параноик, падал с коек
модуль это "законченные программные блоки, состоящие из моделей, представлений, контроллеров и других вспомогательных компонентов."

Можно и так думать. Только, допустим, есть у тебя в приложении, а может даже не в одном, а как минимум в двух (сайт и админ) есть модель в /common/models, и её нужно использовать в неком модуле этого же приложения, ты будешь её клонировать в модуль, или таки воспользуешься тем что в /common/models?
Для чистоты можно, конечно, в самом модуле сделать наследника той модели. Но как быть, например, с хелперами. Мне почему-то кажется, что у каждого разработчика есть как минимум унаследованные Html, ArrayHelper, StringHelper, и т.п. Их доже в модулях для законченности плодить?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы