Concrete5 5.7:使用ServiceProvider交叉包
Concrete5 5.7: using a ServiceProvider cross-package
我正在将旧代码迁移到 5.7,我 运行 遇到了一个关于助手的奇怪问题。我正在使用两个包 - 让我们称它们为 A 和 B。包 A 实现了一个 ServiceProvider。我想在包 B 的控制器中使用它,但似乎无法正确找到它。我是在A包的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');
}
}
然后当我想在包 A 中使用时,这很好用:
$helper = Core::make('helper/group_membership');
但是当我在包 B 中这样做时,它告诉我:
Class helper/group_membership does not exist
除了将两个包合并在一起,我还能做什么?可能是什么原因造成的?
自 we consume that config entry way before we load packages.
以来,无法像那样注册提供者
注册包的正确方法是实例化一个新的 \Concrete\Core\Foundation\Service\ProviderList
并使用 registerProvider
方法。
Here's a good example for how to do that
// Register our service provider
$list = new ProviderList(\Core::getFacadeRoot());
$list->registerProvider('Concrete\Package\LegacySample\Libraries\ServiceProvider');
我正在将旧代码迁移到 5.7,我 运行 遇到了一个关于助手的奇怪问题。我正在使用两个包 - 让我们称它们为 A 和 B。包 A 实现了一个 ServiceProvider。我想在包 B 的控制器中使用它,但似乎无法正确找到它。我是在A包的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');
}
}
然后当我想在包 A 中使用时,这很好用:
$helper = Core::make('helper/group_membership');
但是当我在包 B 中这样做时,它告诉我:
Class helper/group_membership does not exist
除了将两个包合并在一起,我还能做什么?可能是什么原因造成的?
自 we consume that config entry way before we load packages.
以来,无法像那样注册提供者注册包的正确方法是实例化一个新的 \Concrete\Core\Foundation\Service\ProviderList
并使用 registerProvider
方法。
Here's a good example for how to do that
// Register our service provider
$list = new ProviderList(\Core::getFacadeRoot());
$list->registerProvider('Concrete\Package\LegacySample\Libraries\ServiceProvider');