Для начала, стартовое состояния.
- view*goods
Код: Выделить всё
/**
* @var $this \app\modules\bridge\infrastructure\AdminView
*/
use app\components\ViewBehavior;
...
echo SortableGridView::widget([
'as contextView' => [ 'class' => ViewBehavior::className(), 'contextView' => $this],
'dataProvider' => new ArrayDataProvider([..]),
'showHeader' => false,
'summary' => false,
'columns' => [[..]],
'orderUrl' => [..],
'sortOptions' => [..],
]);
...
- view::class*AdminView
!! Следовательно, все виджеты должны подключать свои assets в данный контекст. Это делает поведения ViewBehavior
Пример:
vendor/sjaakp/yii2-sortable-behavior/SortableGridView.php:57
Код: Выделить всё
...
public function init()
{
parent::init();
$classes = isset($this->options['class']) ? $this->options['class'] : '';
$classes .= ' sortable';
$this->options['class'] = trim($classes);
// should be `\app\modules\bridge\infrastructure\AdminView` if call into `view/goods`
$view = $this->getView();
JuiAsset::register($view);
...
- behavior*ViewBehavior
Код: Выделить всё
<?php
namespace app\modules\bridge\submodules\admin\components;
use app\modules\bridge\infrastructure\AdminView;
use yii\base\Behavior;
use yii\base\View;
use yii\base\Widget;
/** Поведения виджета, без контекта вызова с админки */
class ViewBehavior extends Behavior
{
/** @var View */
public $contextView;
/** @inheritdoc */
public function events() {
return [
Widget::EVENT_INIT => 'setContext',
Widget::EVENT_BEFORE_RUN => 'setContext'
];
}
/**
* Установка контекта
*/
public function setContext() {
/** @var Widget $oWidget */
$oWidget = $this->owner;
if (!($oWidget->getView() instanceof AdminView)){
$oWidget->setView($this->contextView === null ? new AdminView() : $this->contextView);
}
}
}
Код: Выделить всё
..
abstract class BaseListView extends Widget
{
/**
* Initializes the view.
*/
public function init()
{
//parent::init(); // here not call Widget init()
if ($this->dataProvider === null) {
Цепочка теряет inject events trigger в BaseListView
По данному поводу был создан запрос на слияния изменения
https://github.com/yiisoft/yii2/pull/14596
Надеюсь смог объяснить быстро, ситуацию, тест корректно затрудняюсь написать быстро. Это займет некоторое время.
Спасибо.