Concrete5 5.7: использование кросс-пакета ServiceProvider

Я перевожу старый код на 5.7 и сталкиваюсь со странной проблемой, когда дело касается помощников. Я работаю с двумя пакетами — давайте назовем их A и B. Пакет A реализует ServiceProvider. Я хотел бы использовать его в контроллере из пакета B, но он не может найти его должным образом. Я настраиваю это в install() функция пакета А, следующим образом

$providers = Config::get('providers');
if (!$providers) {
$providers = array('group_membership' => '\Concrete\Package\A\Src\GroupMembership\GroupMembershipProvider');
} else {
$providers['group_membership'] = '\Concrete\Package\A\Src\GroupMembership\GroupMembershipProvider';
}
Config::set('providers', $providers);

А в самом ServiceProvider я связываю его соответственно;

<?php namespace Concrete\Package\A\Src\GroupMembership;

use \Concrete\Core\Foundation\Service\Provider as ServiceProvider;

class GroupMembershipProvider extends ServiceProvider
{
public function register() {
$this->app->bind('helper/group_membership', 'Concrete\Package\A\Src\GroupMembership\GroupMembershipProvider');
}
}

Затем, когда я хочу использовать в пакете А, это прекрасно работает:

$helper = Core::make('helper/group_membership');

Но когда я делаю это в пакете B, он говорит мне:

Class helper/group_membership does not exist

Что я мог сделать, кроме как объединить два пакета вместе? Что может быть причиной этого?

2

Решение

Провайдеры не могут быть зарегистрированы таким образом, так как мы потребляем эту запись конфигурации намного раньше мы загружаем пакеты.

Правильный способ зарегистрировать пакет — создать новый экземпляр \Concrete\Core\Foundation\Service\ProviderList и использовать registerProvider метод.

Вот хороший пример того, как это сделать

// Register our service provider
$list = new ProviderList(\Core::getFacadeRoot());
$list->registerProvider('Concrete\\Package\\LegacySample\\Libraries\\ServiceProvider');
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]