首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Twig模板调用PHP函数

从Twig模板调用PHP函数
EN

Stack Overflow用户
提问于 2013-09-07 04:15:56
回答 7查看 121.9K关注 0票数 31

我的控制器中有一个返回实体数组的函数,所以在我的twig模板中,我这样做是为了迭代元素:

代码语言:javascript
复制
{% for groupName, entity in items %}
    <ul>
        <ul>
            {% for element in entity %}
                <li>{{ element.getLabel }}</li>
                <li><input type="text" name="detail[{{ element.getId }}]" id="pd_{{ element.getId }}" /><input type="text" name="price[{{ element.getId }}]" id="pd_price_{{ element.getId }}" /><input type="text" name="stock[{{ element.getId }}]" id="pd_stock_{{ element.getId }}" /></li>
            {% endfor %}
        </ul>
    </ul>
{% endfor %}

在我的控制器中,我还有这个PHP函数:

代码语言:javascript
复制
private function DetailCombination($arr, $level, &$result, $curr = array()) {
    for ($i = 0; $i < count($arr); $i++) {
        $new = array_merge($curr, array($arr[$i]));
        if ($level == 1) {
            sort($new);
            if (!in_array($new, $result)) {
                $result[] = $new;
            }
        } else {
            combinations($arr, $level - 1, $result, $new);
        }
    }
}

我可以这样调用它:

代码语言:javascript
复制
for ($i = 0; $i < count($arr); $i++) {
    $this->DetailCombination($arr, $i + 1, $result);
}

// TEST
foreach ($result as $arr) {
    echo join(" ", $arr) . '<br>';
}

是否可以从Twig模板访问PHP函数,以便获得entity中所有可能的元素组合?多么?

**更新**

这是返回Twig模板处理后的实体的函数:

代码语言:javascript
复制
private function getVariations($category_id) {
    $items = array();

    $em = $this->getDoctrine()->getManager();
    $entityCategory = $em->getRepository('CategoryBundle:Category')->find($category_id);

    foreach ($entityCategory->getProductDetails() as $entity) {
        if ($entity->getToProduct() == 1) {
            foreach ($entity->getDetailGroup() as $group) {
                if (!array_key_exists($group->getName(), $items)) {
                    $items [$group->getName()] = array();
                }

                $items [$group->getName()] [] = $entity;
            }
        } 
    }

    return $items;
} 
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-09-07 07:18:57

在Twig中不能直接访问任何PHP函数。

你能做的就是写一个Twig扩展。一种常见的结构是,编写一个具有一些实用功能的服务,编写一个twig扩展作为从Twig访问服务的桥梁。Twig扩展将使用该服务,您的控制器也可以使用该服务。

看一下:http://symfony.com/doc/current/cookbook/templating/twig_extension.html

干杯。

票数 27
EN

Stack Overflow用户

发布于 2014-12-11 04:13:13

已经有一个Twig扩展可以让你从Twig模板中调用PHP函数,比如:

代码语言:javascript
复制
Hi, I am unique: {{ uniqid() }}.

And {{ floor(7.7) }} is floor of 7.7.

请参见官方extension repository

票数 14
EN

Stack Overflow用户

发布于 2017-09-20 10:28:35

令我惊讶的是,代码答案还没有发布出来,它只是一个链接。

你可以直接用{{ categeory_id | getVariations }}

这是一行代码:

Twig2:

代码语言:javascript
复制
$twig->addFilter('getVariations', new Twig_Filter_Function('getVariations'));

小枝3:

代码语言:javascript
复制
$this->twig->addFilter(new \Twig\TwigFilter('getVariations','getVariations'));

小枝3,但功能是as,而不是过滤器:

代码语言:javascript
复制
$this->twig->addFunction(new \Twig\TwigFunction('getVariantsFunc', 'getVariations'));
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18665923

复制
相关文章

相似问题

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