【问题标题】:How to get controller/i18n object from library in Symfony2?如何从 Symfony2 的库中获取控制器/i18n 对象?
【发布时间】:2012-04-12 11:15:34
【问题描述】:

Symfony1 中,我使用:

sfContext::getInstance()->getController()->...
sfContext::getInstance()->getI18N()->...

如何在 Symfony2 中得到这个?

更新: 在 Symfony2 中这是不可能的!

【问题讨论】:

    标签: php symfony1 symfony


    【解决方案1】:

    在您的控制器中,您可以执行$this->get('translator')。更多信息here。虽然不明白控制器部分。

    编辑:

    示例服务实现将是,

    在你的课堂上

    namespace Your\Class\Namespace;
    use Symfony\Component\Translation\TranslatorInterFace;
    use Symfony\Component\HttpFoundation\Request;
    
    
    class YourClass
    {
    
        private $translator;
        private $request;
    
        public function __construct(TranslatorInterFace $translator, Request $request)
        {
            $this->translator = $translator;
            $this->request = $request;
        }
    
        public function aMethod(){
            $translator->trans('key');
            $session = $this->request->getSession();
        }
        //.....
    }
    

    services.yml中添加以下行

     my_service:
      scope: request
      class: FQCN\Of\YourClass
      arguments: [@translator, @request]
    

    然后你的控制器就可以访问这个类了,

    $this->get('my_service');
    

    【讨论】:

    • $this 仅在控制器/视图中有效。我需要从库/其他类中获取控制器。如何做到这一点?
    • 您必须将类定义为服务容器并注入@translator 服务。见here
    • 好吧,我试着换一种说法来解释:控制器执行一些函数 Foo::bar() 并且在函数 Foo::bar() 中我需要访问会话,以设置 Flash 消息。服务不这样做。
    • 是的,我明白这一点,但是如何从静态类/函数访问这个服务控制器?
    猜你喜欢
    • 2015-02-07
    • 2012-12-03
    • 2012-09-21
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多