вопрос Определенно слишком широк, но вот решение, которое я использовал:
<?php
namespace backend\modules\tests\components;
use yii\helpers\ArrayHelper;
use yii\web\Controller as BaseController;
use yii\web\View;
class Controller extends BaseController
{
/**
* @inheritdoc
*/
public function beforeAction($action)
{
if (parent::beforeAction($action)) {
Yii::$app->view->on(View::EVENT_BEGIN_BODY, function() {
$this->fillBreadcrumbs();
});
return true;
} else {
return false;
}
}
/**
* Fill common breadcrumbs
*/
protected function fillBreadcrumbs()
{
$breadcrumbs = [];
// Add needed elements to $breadcrumbs below
$label = 'Tests';
$breadcrumbs[] = $this->route == '/tests/default/index' ? $label : [
'label' => $label,
'url' => ['/tests/default/index'],
];
// ...
$this->mergeBreadCrumbs($breadcrumbs);
}
/**
* Prepend common breadcrumbs to existing ones
* @param array $breadcrumbs
*/
protected function mergeBreadcrumbs($breadcrumbs)
{
$existingBreadcrumbs = ArrayHelper::getValue($this->view->params, 'breadcrumbs', []);
$this->view->params['breadcrumbs'] = array_merge($breadcrumbs, $existingBreadcrumbs);
}
}
Как вы можете видеть, он основан на просмотре событий и пользовательского контроллера (простирающейся от yii\web\Controller
).
Все, что вам нужно, это продлить необходимые контроллеры от пользовательского.
Вопрос не является широким - это довольно просто. Я буду перефразировать: «Как вы устанавливаете панировочные сундуки из файла модуля, так что вам не нужно ставить повторяющиеся куски внутри модуля (модели/контроллеры/просмотр)?» Информация, предоставленная вами в полезной форме, но не затрагивает этот вопрос. – nssmart