Я пытаюсь внедрить экземпляр класса, который управляется через контейнер IoC и связан с помощью поставщика услуг. Метод register () выглядит следующим образом и содержит много ошибок при настройке этого объекта:
public function register()
{
$this->app->bind('GoogleAnalytics', function($app)
{
if(!\File::exists(\Config::get('analytics.certificate_path')))
{
throw new \Exception("Can't find the .p12 certificate in: " . \Config::get('analytics.certificate_path'));
}
$config = array(
'oauth2_client_id' => \Config::get('analytics.client_id'),
'use_objects' => \Config::get('analytics.use_objects'),
);
$client = new \Google_Client($config);
// $client->setAccessType('offline');
$client->setAssertionCredentials(
new \Google_Auth_AssertionCredentials(
\Config::get('analytics.service_email'),
\Google_Service_Analytics::ANALYTICS_READONLY,
file_get_contents(\Config::get('analytics.certificate_path'))
)
);
return new Analytics($client);
});
}
Затем в моем контроллере я хочу, чтобы это автоматически передавалось через конструктор через IoC, хотя это не работает, и я получаю ошибку ReflectionException: Class not found.
class DashboardController extends BaseController {
protected $analytics;
public function __construct(GoogleAnalytics $analytics) {
$this->analytics = $analytics;
}
У меня сложилось впечатление, что это должно быть возможно? Комментарий thepsion5 здесь также, кажется, предполагает, что это должно работать. Не обращая внимания на другие вопросы (например, на использование репозитория и т. Д.), Есть какие-то идеи о том, что для меня не так?
Как всегда, любая помощь / идеи высоко ценится, и большое спасибо заранее 🙂
При автоматическом введении с помощью подсказки типа ДОЛЖНА существовать подсказка типа. Ли GoogleAnalytics
класс / интерфейс существуют в вашем случае? Я думаю, нет.
Кроме того, если вы используете пространство имен, имейте в виду, что вы должны app->bind('Full\Namespace\ClassName', ...)
потому что все имена классов внутри строки обрабатываются так, как если бы они были в глобальном пространстве имен.
Других решений пока нет …