Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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
Events 模板变量中的细枝事件侦听器(挂钩)_Events_Variables_Hook_Listener_Twig - Fatal编程技术网

Events 模板变量中的细枝事件侦听器(挂钩)

Events 模板变量中的细枝事件侦听器(挂钩),events,variables,hook,listener,twig,Events,Variables,Hook,Listener,Twig,我有一些想法需要在当前项目中实施。下面我将用一个例子来解释: 我将在许多模板中使用以下变量结构: {% if article.tags is iterable %} {% for tag in article.tags %} {{ tag.title }} {% endfor %} {% endif %} 正如您在上面的第1行中所看到的,然后我将把包含来自PHP的标签数据列表的文章变量数据分配给Twig模板加载器,这是常见用法。但是,我不想从数据库加载标签数据并

我有一些想法需要在当前项目中实施。下面我将用一个例子来解释:

我将在许多模板中使用以下变量结构:

{% if article.tags is iterable %}
    {% for tag in article.tags %}
        {{ tag.title }}
    {% endfor %}
{% endif %}
正如您在上面的第1行中所看到的,然后我将把包含来自PHP的标签数据列表的文章变量数据分配给Twig模板加载器,这是常见用法。但是,我不想从数据库加载标签数据并分配给模板,因为我认为它将使用我的服务器连接和资源,即使使用或不使用标签数据

因此,我认为最好的方法是使用事件侦听器钩子概念,在细枝内部实现,下面是过程:

1在加载模板之前,我正在PHP文件的某个地方准备一个侦听器:$this->twig->addListenerMethod$this,'tags'

2当细枝解析tags变量时,它将检查是否有一个侦听器将相同的方法名附加到该变量

3当发现侦听器时,细枝将调用通过传递父对象项目作为其第一个参数而指定的方法

4当调用该方法时,它将按其应该的方式处理并返回所需的标记数据列表

我的问题是:

1我可以在哪个细枝源文件中开始查找并在细枝中实现事件侦听器钩子概念

2是否有人已经使用了与我上面描述的相同的Twig实现

还是有人有什么建议

我希望我能对此有很多建议,同时我也在挖掘细枝的来源

谢谢


亲切问候。

我找到了解决我自己问题的方法:

我只需要为模板分配一个Article对象:

$template->render(array(
  'article' => new Article()
);
下面是对象文章的外观:

class Article
{
  public function tags($args)
  {
    return array(
      array(
        'title' => 'oke',
        'desc' => 'lorem ipsum'
      ),
      array(
        'title' => 'oke 1',
        'desc' => 'lorem ipsum 1'
      )
    );
  }
}
如果您想将和参数传递给方法标记,只需使用以下示例:

{% if article.tags('param_1', 'param_n') is iterable %}
  {% for tag in article.tags('param_1', 'param_n') %}
    {{ tag.title }}
  {% endfor %}
{% endif %}

我找到了解决我自己问题的办法:

我只需要为模板分配一个Article对象:

$template->render(array(
  'article' => new Article()
);
下面是对象文章的外观:

class Article
{
  public function tags($args)
  {
    return array(
      array(
        'title' => 'oke',
        'desc' => 'lorem ipsum'
      ),
      array(
        'title' => 'oke 1',
        'desc' => 'lorem ipsum 1'
      )
    );
  }
}
如果您想将和参数传递给方法标记,只需使用以下示例:

{% if article.tags('param_1', 'param_n') is iterable %}
  {% for tag in article.tags('param_1', 'param_n') %}
    {{ tag.title }}
  {% endfor %}
{% endif %}

我想我已经找到了一个类似的解决方案,当我在getAttribute方法的Template.php文件中挖掘Twig source时,我发现我们可以在模板中将object指定为变量,所以文章应该指定为object,标记就是方法。不,我的问题是,我将如何传递在getAttribute方法中找到的参数?我想我已经找到了一个类似的解决方案,当我在getAttribute方法上的Template.php文件中挖掘Twig source时,我发现我们可以在模板中将对象指定为变量,因此,应将文章指定为对象,标记将成为方法。不,我的问题是,如何传递getAttribute方法中的参数?