Это пример полной реализации службы, поддерживающей контейнер.
Следует помнить, что следует избегать инъекции всего контейнера. Рекомендуется применять только необходимые компоненты. См. Law of Demeter - Wikipedia для получения дополнительной информации по этому вопросу.
С этой целью, эта команда поможет найти все доступные услуги:
# symfony < 3.0
php app/console debug:container
# symfony >= 3.0
php bin/console debug:container
Во всяком случае, вот полный пример.
app/config/services.yml
файл:
app.my_service:
class: AppBundle\Service\MyService
calls:
- [setContainer, ['@service_container']]
класс обслуживания в src/AppBundle/Service/MyService.php
:
<?php
namespace AppBundle\Service;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerAwareTrait;
class MyService implements ContainerAwareInterface
{
use ContainerAwareTrait;
public function useTheContainer()
{
// do something with the container
$container = $this->container;
}
}
И, наконец ваш контроллер в src/AppBundle/Controller/MyController.php
:
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
/**
* My controller.
*/
class MyController extends Controller
{
/**
* @Route("/", name="app_index")
* @Method("GET")
*/
public function indexAction(Request $request)
{
$myService = $this->get('app.my_service');
$myService->useTheContainer();
return new Response();
}
}
Это Ваш полный класс или просто подмножество ? $ this-> container не существует в вашем классе. Пожалуйста, покажите свои заявления «use». – saamorim
. Вы пытались установить параметры вызовов в определении своей службы, чтобы вызвать метод setContainer, передающий service_container в качестве аргумента? – Picoss