Как сделать маршрутизацию и создание URL между расширениями? - PullRequest
0 голосов
/ 28 августа 2018

У меня есть два расширения (мое собственное, а не стороннее). Расширение B знает и использует другое расширение A. Используя composer, папка vendor B содержит папку A. Все используется в приложении Yii2. Каждое расширение предоставляет один модуль. Все настроено и работает правильно.

Обзор папок / структур:

my-application        extension-b           extension-a
  vendor                vendor                vendor
    company               company               ---
      extension-a           extension-a    
      extension-b

Единственное, что меня смущает, - это как мне настроить маршрутизацию и создание URL . В настоящее время у меня есть ссылки в расширении B, который создается следующим образом:

Html::a('Do something', ['/A/controller-in-a/some-action']) // problematic!

Это просто работает, потому что приложение, в котором используются расширения, имеет определения модулей:

'modules' => [
    'A' => ['class' => 'company\extension_a\Module'],
    'B' => ['class' => 'company\extension_b\Module'],
],

В приложении пока нет специальной конфигурации менеджера URL:

'urlManager' => ['enablePrettyUrl' => true, 'showScriptName' => false]

Модуль A в расширении выглядит следующим образом (то же самое определяется в B соответственно):

namespace company\namespace_of_module_a;

class Module extends \yii\base\Module {
    public $controllerNamespace = 'company\extension_a\controllers';
}

Если бы у меня были независимые расширения, которые создавали бы только ссылки внутри себя, у меня не было бы проблемы. Все они были бы просто относительными. Но теперь расширение B использует расширение A и имеет ссылки на него. Теперь, как расширение B должно создавать ссылки на расширение A? В приложении есть определение, где можно получить доступ к расширению / модулю A, а не к расширению B. Должен ли я в любом случае использовать псевдонимы? Могу ли я настроить модули для чтения URL? Учтите, что расширения должны быть независимы от приложения, поскольку они могут использоваться с другими приложениями.

Когда я создаю ссылки в расширении B, это должно быть определено следующим образом?

Html::a('Do something', ['controller-in-a/some-action'])
// or
Html::a('Do something', ['@extension-a/controller-in-a/some-action'])

Как мне все отлично настроить?

Надеюсь, что это имеет смысл и понятно ...

Полагаю, это связано с той же проблемой: https://github.com/yiisoft/yii2/issues/14421

...