将供应商库添加到Symfony 2以通过容器访问

时间:2015-04-10 11:14:07

标签: php symfony service

我仍然是symfony的新手,并尝试将以下库包含到我的项目中,以便我可以使用$myThing = $container->get('myThing');来访问它 有问题的图书馆是:https://github.com/gridiron-guru/FantasyDataAPI

我已经将库下载并通过作曲家需要进入我的供应商目录:

"require": {
        "php": ">=5.3.3",
        "symfony/symfony": "2.4.*",
        ...
        "gridiron-guru/fantasy-data-api" : "1.*"
    },

我已添加到我的app \ config.yml:

parameters:
    fantasyapi.key:  **********************c5o67

services:
    my_mailer:
        class:        FantasyDataAPI
        arguments:    ["%fantasyapi.key%"]

当我运行容器时:debug我看到:

fantasy_api                   container FantasyDataAPI

我在项目根目录中创建了一个名为play.php的文件:

    <?php

    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\Debug\Debug;


    $loader = require_once __DIR__.'/app/bootstrap.php.cache';
    Debug::enable();

    require_once __DIR__.'/app/AppKernel.php';

    $kernel = new AppKernel('dev', true);
    $kernel->loadClassCache();
    $request = Request::createFromGlobals();

    $kernel->boot();

    $container = $kernel->getContainer();
    $container->enterScope('request');
    $container->set('request', $request);

    /** all the setup is complete!! */

    $client = new FantasyDataAPI\Client( "**********************c5o67" );
$result = $client->FantasyPlayers([]);

var_dump($result)

这会产生所需的结果但不使用我的服务。

如果我将其更改为我的服务:

$client = $container->get('fantasy_api');
$result = $client->FantasyPlayers([]);

var_dump($result);

我收到错误:

PHP Fatal error:  Class 'FantasyDataAPI' not found in D:\Ampps\www\NFLtest\app\cache\dev\appDevDebugProjectContainer.php on line 729
PHP Stack trace:
PHP   1. {main}() D:\Ampps\www\NFLtest\play.php:0
PHP   2. Symfony\Component\DependencyInjection\Container->get() D:\Ampps\www\NFLtest\play.php:24
PHP   3. appDevDebugProjectContainer->getFantasyApiService() D:\Ampps\www\NFLtest\app\bootstrap.php.cache:2059

Fatal error: Class 'FantasyDataAPI' not found in D:\Ampps\www\NFLtest\app\cache\dev\appDevDebugProjectContainer.php on line 729

Call Stack:
    0.0010     128760   1. {main}() D:\Ampps\www\NFLtest\play.php:0
    0.2940    4392496   2. Symfony\Component\DependencyInjection\Container->get() D:\Ampps\www\NFLtest\play.php:24
    0.2940    4392704   3. appDevDebugProjectContainer->getFantasyApiService() D:\Ampps\www\NFLtest\app\bootstrap.php.cache:2059

我确定它与命名空间有关,是否需要更改库中的某些内容?

如何将此库添加为服务?

**** ****解决 确实是命名空间的问题感谢David

添加FantasyDataAPI / Client解决了这个问题。

1 个答案:

答案 0 :(得分:0)

您没有将完整的命名空间提供给要实例化的类。

使用FantasyDataAPI\Client代替FantasyDataAPI

services:
    my_mailer:
        class:        FantasyDataAPI\Client
        arguments:    ["%fantasyapi.key%"]