Symfony2:我的第一次服务


Symfony2: my first service

我正在与错误作斗争:

The autoloader expected class "ElectricAnimal'CardsinthepostBundle'Services'MyService" to be
defined in file
"/vhosts/domains/cardsinthepost.com/public/app/../src/ElectricAnimal/CardsinthepostBundle/Services/MyService.php".
You probably have a typo in the namespace or the class name.

但类正是在该文件中定义的

/src/ElectricAnimal/CardsinthepostBundle/Services/MyService.php:

<?php
// Bundle/ElectricAnimalCardsinthepost/Services/MyService.php
namespace Bundle'ElectricAnimalCardsinthepost'Services;
class MyService
{
    public function __construct()
    {
    }
    public function sum($n1, $n2) {
        return $n1 + $n2;
    }
}

在我的控制器中,我有:

<?php    
class DefaultController extends Controller
{
    public function indexAction()
    { 
        $number = $this->get('my_service')->sum(12, 37);
        return new Response('<pre>' . $number . '</pre>');
    }
}
?>

附加信息:

/src/ElectricAnimal/CardsinthepostBundle/DependencyInjection/ElectricAnimalCardsinthepostExtension.php:

<?php
namespace ElectricAnimal'CardsinthepostBundle'DependencyInjection;
use Symfony'Component'DependencyInjection'ContainerBuilder;
use Symfony'Component'Config'FileLocator;
use Symfony'Component'HttpKernel'DependencyInjection'Extension;
use Symfony'Component'DependencyInjection'Loader;
/**
 * This is the class that loads and manages your bundle configuration
 *
 * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
 */
class ElectricAnimalCardsinthepostExtension extends Extension
{
    /**
     * {@inheritDoc}
     */
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);
        $loader = new Loader'YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
    }
}

/src/ElectricAnimal/CardsinthepostBundle/Resources/config/services.yml:

services:
    my_service:
        class: ElectricAnimal'CardsinthepostBundle'Services'MyService

我的答案:

MyService.php使用的命名空间有点错误。需要:

// Bundle/ElectricAnimal/Cardsinthepost/Services/MyService.php
namespace ElectricAnimal'CardsinthepostBundle'Services;

而不是

// Bundle/ElectricAnimalCardsinthepost/Services/MyService.php
namespace Bundle'ElectricAnimalCardsinthepost'Services;

Symfony2命名有时会让我发疯!

已经构建了这样的问题,希望有人能有这样的答案。