我正在使用symfony2并且在服务容器文件中我遇到了使用会话的问题。
这是我的服务文件:
public function FinalPrice()
{
$session = $this->get('Currency');
return $session;
}
我在课程的顶部添加了响应和会话库:
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
我在symfony网站上发现它很容易使用它,没有任何问题
http://symfony.com/doc/current/book/service_container.html
其中说:
public function indexAction($bar)
{
$session = $this->get('session');
$session->set('foo', $bar);
// ...
}
但是我收到了这个错误:
FatalErrorException: Error: Call to undefined method Doobin\CoreBundle\service\GeneralClass::get() in /var/www/doobin92/src/Doobin/CoreBundle/service/GeneralClass.php line 311
我也尝试过:
$session = $this->getRequest()->getSession();
但它给出了这个错误:
FatalErrorException: Error: Call to undefined method Doobin\CoreBundle\service\GeneralClass::getRequest() in /var/www/doobin92/src/Doobin/CoreBundle/service/GeneralClass.php line 311
感谢adcance
答案 0 :(得分:2)
您尝试在此处使用的get()
和getRequest()
帮助程序是Symfony2基本控制器的一部分。
一旦控制器扩展了上面显示的基本控制器,它们应该只在Controller上下文中使用。
如果您查看代码,您可能会注意到他们都使用container
获取request_stack
的{{1}}服务;
getRequest()
$this->container->get('request_stack')->getCurrentRequest();
的任何其他服务,
get()
当您尝试在服务中调用这两种方法时。您在Controller上下文中 NOT ,并且您添加的服务类不提供此类帮助程序。
要解决此问题,
您必须通过$this->container->get($id);
注入您想要拨打的服务
帮助直接在您的服务中,或
通过添加
get()
到您的服务类,
和
use Symfony\Component\DependencyInjection\ContainerInterface;
public YourServiceClass
{
private $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
到您的服务定义。
答案 1 :(得分:2)
一种方法是将服务容器注入您的服务。
services:
your_service:
class: YourClass
arguments: ["@service_container"]
在您的服务类中:
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
YourClass {
protected $container;
public function __construct(Container $container) {
$this->container = $container;
}
}
然后,您可以在服务中使用$this->container->get('session');
。