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;
}
}
是否可以将变量作为参数传递给服务?
我有一个服务可以与实体管理器一起做一些事情。
类似于:
$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;
}
}