Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将Java脚本发送到底部?(在symfony 2中)_Javascript_Templates_Symfony_Twig - Fatal编程技术网

Javascript 如何将Java脚本发送到底部?(在symfony 2中)

Javascript 如何将Java脚本发送到底部?(在symfony 2中),javascript,templates,symfony,twig,Javascript,Templates,Symfony,Twig,我想创建一些视图,这些视图可以自己打印一些html代码,同时将javascript代码发送到底部,而无需扩展布局 我的想法是,我有一个布局,然后当前url的特定视图扩展了该布局,在该视图中,我包括了其他视图,这些视图可以向超出范围的其他块添加代码(因为它们不从布局或从布局继承的视图继承)。可能吗 假设这是我布局的一部分: {# ::layout.html.twig #} . . {% block javascripts %} {% endblock %} </body> . . 这

我想创建一些视图,这些视图可以自己打印一些html代码,同时将javascript代码发送到底部,而无需扩展布局

我的想法是,我有一个布局,然后当前url的特定视图扩展了该布局,在该视图中,我包括了其他视图,这些视图可以向超出范围的其他块添加代码(因为它们不从布局或从布局继承的视图继承)。可能吗

假设这是我布局的一部分:

{# ::layout.html.twig #}
.
.
{% block javascripts %}
{% endblock %}
</body>
.
.
这是我想包括的视图,例如,google+1按钮:

{# Company:buttons:google_button.html.twig #}
<gb></gb> {# or whatever #}

{# somehow send '<script>blabla</script>' to the 'javascripts' block #}
{公司:按钮:google_button.html.twig}
{#或其他什么}
{#以某种方式将'blabla'发送到'javascripts'块}

twig和symfony2是否可以这样做?

我想您必须编写自己的twig扩展来定义两个函数,比如
add_js
print_js

小枝延伸:

namespace Me\MyBundle\Twig\Extension;

class MyExtension extends \Twig_Extension {
    private $js = array();

    /**
     * {@inheritdoc}
     */
    public function getFunctions() {
        return array(
            'put_js' => new \Twig_Function_Method($this, 'putJs', array('is_safe' => array('html'))),
            'print_js' => new \Twig_Function_Method($this, 'printJs', array('is_safe' => array('html')))
        );
    }

    public function putJs($js) {
        $this->js[] = $js;
    }

    public function printJs() {
        return implode(PHP_EOL, $this->js);
    }

    /**
     * Returns the name of the extension.
     *
     * @return string The extension name
     */
    public function getName() {
        return 'my';
    }
}
依赖项注入配置:

<service id="twig.extension.me.my" class="Me\MyBundle\Twig\Extension\MyExtension" public="false">
    <tag name="twig.extension" />
</service>

最终用途:

{# ::layout.html.twig #}

   ...
   {{ print_js() }}
</body>

{# Company:buttons:google_button.html.twig #}

{% put_js('<script>...</script>') %}
{#:::layout.html.twig}
...
{{print_js()}}
{#公司:按钮:google#u button.html.twig}
{%put_js('.')%}

我刚刚用“使用”实现了您正面临的问题:

需要进行一些重构,因为您需要从主基文件中删除javascript块,并将其再次包含在javascript细枝文件中。然后在视图中,您可以通过首先定义以下内容来访问javascript块:


{%use'ExampleBundle::javascript.html.twig'和javascript%}

只想实现一个包含@Crozin代码的包,但在上发现一个已经完成的包:


您是说我必须在布局和视图中都放置“使用”块吗?否则,我的“google_按钮”如何才能将javascript代码发送到最终输出的底部?如果我在布局和视图中都放置“use”块,它不会在最终输出中出现两次吗?
{# ::layout.html.twig #}

   ...
   {{ print_js() }}
</body>

{# Company:buttons:google_button.html.twig #}

{% put_js('<script>...</script>') %}