首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:不能创建非活动范围的服务("templating.helper.assets") (“请求”)

错误:不能创建非活动范围的服务("templating.helper.assets") (“请求”)
EN

Stack Overflow用户
提问于 2013-07-30 09:07:12
回答 3查看 7.9K关注 0票数 7

我的错误越来越少,

代码语言:javascript
复制
  [Twig_Error_Runtime]                                                                                                                                                                                     
  An exception has been thrown during the rendering of a template ("You cannot create a    service ("templating.helper.assets") of an inactive scope ("request").") in "AcmeMessagingBundle:Comment:email.html.twig".

我从symfony 2自定义控制台命令中呈现小枝模板。

下面是我的服务类,它是事件订阅者,我通过symfony控制台命令触发onCommentAddEmail事件发送电子邮件,

代码语言:javascript
复制
class NotificationSubscriber implements EventSubscriberInterface
{
     private $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }


    public static function getSubscribedEvents()
    {
         return array(
            'comment.add'     => array('onCommentAddEmail', 0),
         );
     }

     public function onCommentAddEmail(CommentAddEvent $event)
     {
              ...................


             $body = $this->container->get('templating')->render(
            'AcmeMessagingBundle:Comment:email.html.twig',
                array('template' => $template)
             );

     .......


    }

}

$body被传递给迅捷邮件发送电子邮件。

这是我的服务定义,

代码语言:javascript
复制
     Acme\MessagingBundle\Subscriber\NotificationSubscriber     
代码语言:javascript
复制
<services>
    <service id="notification_subscriber" class="%notification_subscriber.class%">
        <argument type="service" id="service_container" />
        <tag name="kernel.event_subscriber" />
    </service>
</services>

下面的帖子说这个问题在symfony 2.1中已经解决了,但是我仍然有错误,

代码语言:javascript
复制
 https://github.com/symfony/symfony/issues/4514

我已经引用了container/scopes.html,我已经把整个容器传递给了我的服务。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-06 12:13:09

不知道这是不是最好的方法,但增加这个对我来说是有效的,

代码语言:javascript
复制
    $this->container->enterScope('request');
    $this->container->set('request', new Request(), 'request');
票数 26
EN

Stack Overflow用户

发布于 2013-07-30 11:43:26

正如Stof引用的那样:

如果您使用基于请求的资产帮助器(从请求对象获取基url ),它实际上不能从CLI中使用,因为您在那里没有请求。

如果您打算从CLI中使用asset函数,则不能在模板中使用它。

票数 6
EN

Stack Overflow用户

发布于 2014-06-24 09:28:30

出现这个问题是因为您在模板中使用了资产(),这取决于请求,而且命令行应用程序中没有请求。

快速修复:

代码语言:javascript
复制
framework:
  templating:
    assets_base_urls: { http: ["http://yoursite.com"], ssl: ["http://yoursite.com"] }

这里有更多信息:https://stackoverflow.com/a/24382994/1851915

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17942738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档