Я использую следующее, чтобы узнать об услугах и их определении:
<?php
namespace Members\Bundle\ManagementBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
class IndexController extends Controller
{
public function learnAction()
{
$container= new ContainerBuilder();
$container->register('test_service','User');
var_dump($container->hasDefinition('test_service')); // return true
return new Response("hi");
}
}
Служба test_service
зарегистрирована, а var_dump
true
. Но когда я возвращаюсь к консоли и пытаюсь отлаживать, используя:
php app/console container:debug test_service
[Symfony\Component\DependencyInjection\Exception\InvalidArgumentException] Определение сервиса "test_service" не существует.
container: debug [--show-private] [--tag = "..."] [--tag s] [--parameter = "..."] [--p arameters] [name]
Что я плохо понимаю? Ваша обычная помощь очень ценится.
Вы должны определить свои службы в одном из файлов конфигурации, загружаемых Symfony при создании вашего контейнера.
В вашем примере вы вручную создаете экземпляр компоновщика контейнеров, но это не строитель, используемый Symfony при определении его контейнера.
Если вы определяете свою услугу, например, app/config/services.yml, она будет доступна для команды консоли.