Symfony2,以变量作为参数的服务

Symfony2, Service with variable as argument

是否可以将变量作为参数传递给服务?

我有一个服务可以与实体管理器一起做一些事情。

类似于:

$this -> container -> get('getuser')->setArgument2($someVariable);

这有可能吗?

config.yml

services:
getuser:
    class: fancypathtoservice
    arguments: [@doctrine.orm.entity_manager]

我的服务:

class GetUser
{
public function getuserAction($userid)
{

    $em = $this->em;

    $query = $em->createQuery(
        'SELECT p
FROM SomeBundle:User p
WHERE p.userid = :id'
    )->setParameters(array(
            'id' => $userid,
        ));

    $user = $query->getResult();
    $user = $user[0];

    return $user;
}

protected $em;

public function __construct(EntityManager $entityManager)
{
    $this->em = $entityManager;
}
}

然后在我调用的控制器中

$player = $this -> container -> get('getuser');

现在我需要控制器将 $userid 传递给服务。这有可能吗?

此致

是的,你可以! (但我从来不需要)

但是您必须知道服务的默认范围是 container(这意味着它将是完整请求的同一个实例)。

示例:

<?php
namespace Bundle\Service;

class GetUserService
{
    protected $argument2;

    public function setArgument2($argument2)
    {
        $this->argument2 = $argument2;
    }
}

-

#services.yml
services:
    getuser:
        class: Bundle\Service\GetUserService

您现在可以设置变量 $argument2

然而,正如已经提到的,我从来没有这样做过。

将服务注入服务

我通常在构造函数中将其他服务作为参数注入,例如:

<?php
namespace Bundle\Service;

class GetUserService
{
    protected $em;

    public function __construct($em)
    {
        $this->em = $em;
    }
}

-

#services.yml
services:
    getuser:
        class: Bundle\Service\GetUserService
        arguments: [@doctrine.orm.entity_manager]

向服务调用提交参数

如果我的参数在每次服务调用中都不同,我只需将其作为参数提交到方法中即可:

<?php
namespace Bundle\Service;

class GetUserService
{
    public function add($a, $b)
    {
        return $a+$b;
    }
}