Я переношу старый код на 5.7, и у меня возникает странная проблема, когда речь идет о помощниках. Я работаю с двумя пакетами – назовем их A и B. Пакет A реализует ServiceProvider. Я хотел бы использовать его в контроллере в пакете B, но он, похоже, не может найти его должным образом. Я настраиваю его в функции install()
пакета A, следующим образом
$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'); } }
Затем, когда я хочу использовать в пакете A, это работает отлично:
$helper = Core::make('helper/group_membership');
Но когда я делаю это в пакете B, он говорит мне:
Class helper/group_membership does not exist
Что я мог сделать, кроме объединения двух пакетов? Что может быть причиной этого?
Провайдеры не могут быть зарегистрированы так, потому что мы потребляем этот способ ввода конфигурации до загрузки пакетов .
Правильный способ регистрации пакета – создать экземпляр нового \Concrete\Core\Foundation\Service\ProviderList
и использовать метод registerProvider
.
Вот хороший пример того, как это сделать.
// Register our service provider $list = new ProviderList(\Core::getFacadeRoot()); $list->registerProvider('Concrete\\Package\\LegacySample\\Libraries\\ServiceProvider');