Symfony2,Service with variable as argument

时间:2015-01-06 11:50:23

标签: symfony variables service

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

我有一个服务,它与实体经理做了一些事情。

类似的东西:

$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传递给服务。这有可能吗?

此致

1 个答案:

答案 0 :(得分:1)

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

但是,您必须知道服务的默认范围是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;
    }
}