У меня есть два расширения (мое собственное, а не стороннее). Расширение 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