I'm migrating old code to 5.7, and I'm running into a weird issue when it comes to helpers. I'm working with two packages - let's call them A and B. Package A one implements a ServiceProvider. I would like to use it in a controller in package B, but it seems unable to find it properly. I'm configuring it in the install()
function of package A, as follows
$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);
And in the ServiceProvider itself, I bind it accordingly;
<?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');
}
}
Then when I want to use in package A, this works just fine:
$helper = Core::make('helper/group_membership');
But when I do that in package B, it tells me:
Class helper/group_membership does not exist
What could I do, except for merging the two packages together? What may be causing this?
Providers cannot be registered like that since we consume that config entry way before we load packages.
The proper way to register a package is to instantiate a new
\Concrete\Core\Foundation\Service\ProviderList
and use theregisterProvider
method.Here's a good example for how to do that