是否可以将变量作为参数传递给服务?
我有一个服务,它与实体经理做了一些事情。
类似的东西:
$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传递给服务。这有可能吗?
此致
答案 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;
}
}