Включить базовый шаблон .twig в шаблон .php - PullRequest
4 голосов
/ 13 января 2012

Я использую шаблоны .twig на веб-сайте, однако мне нужно немного хитрить с логикой в ​​некоторых видах.Я не думаю, что веточка может справиться с этим, и это просто кусок пирога в PHP.(Я не собираюсь объяснять детали того, что это такое, просто знаю, как это легко в PHP, и у меня уже есть код).Вопрос в том, можно ли включить шаблон .PHP в базовые или родительские шаблоны, имеющие тип .twig?

Пример ниже (который не работает) - blah.html.php - это шаблон, который расширяет базу.html.twig template ...

/ some / web / directory / bundlename / Resources / views / blah / blah.html.php

<?php $view->extend('::base.html.twig') ?>

<?php $view['slots']->set('title', 'Welcome to nowhere!') ?>

<?php $view['slots']->start('body') ?>

    <div id="body">
        html stuff here, blah blah blah...
        <?php .... ?>
            complex php and html stuff, and so on...
        </php end....?> 
        you get the idea...
    </div>

<?php $view['slots']->stop() ?>

В браузере код выше отображаетвесь код .twig в базовом шаблоне в виде текста в браузере (т.е. он не выполняется механизмом шаблонов).

PS - да. У меня есть оба .twig и .php в app / config /config.yml

templating:      { engines: ['twig', 'php'] }

Хорошо, вот подробности о "сложных" вещах ... Это взято из версии сайта, которая была закодирована в Symfony 1.4 - Его обновление доSymfony 2 и мы хотим использовать все .twig

<?php foreach ($all_items as $item): ?>
<tr>
    <td valign="top">
        //<?php include_partial('global/item', array('item' => $item)) ?>

 <<< some code snipped out here >>>

    <td valign="top">
        <table border="1" width="100%">
        <?php echo $form->renderFormTag('memberitems/additem') ?>
        <?php echo $form['item_id']->render(array('value' => $item->getIid())) ?>
        <?php echo $form['user_id']->render(array('value' => 1)) ?>
        <?php echo $form['_csrf_token'] ?>
            <tr>
                <td width="50" colspan="2" align="center">Quantity<br><?php echo $form['quantity']->render() ?></td>
                <td width="50" colspan="2" align="center">Amount<br><?php echo $form['value']->render() ?></td>
                <td width="50" colspan="2" align="center"><input type="submit" value="Add"></td>
            </tr>
        </form>

    <<< here is a complex portion, we're declaring a variable with a value >>>
    <<< cant do this with twig - from what I know... >>>

        <?php // determine if item is in registry - if so display "Currently Asking For:" ?>
        <?php $is_in_registry = false; ?>
        <?php foreach($member_items as $m_item): ?>
        <?php   if($m_item->getIid() == $item->getIid()): ?>
        <?php       if($is_in_registry == false): ?>
        <?php           $is_in_registry = true; ?>
                        <tr>
                            <td width="50" colspan="6" align="center"><br>Currently Asking For:</td>
                        </tr>
        <?php       endif ?>

        <?php echo $form->renderFormTag('memberitems/removeitem') ?>
        <?php echo $form['item_id']->render(array('value' => $item->getIid())) ?>
        <?php echo $form['user_id']->render(array('value' => 1)) ?>
        <?php echo $form['id']->render(array('value' => $m_item->getMIid())) ?>
        <?php echo $form['_csrf_token']->render() ?>

                        <tr>
                            <td width="50" colspan="4" align="center">
                                <?php echo $m_item->getMIqty()." @ ".$m_item->getMIval() ?>
                            </td>
                            <td width="50" colspan="2" align="center"><input type="submit" value="Remove"></td>
                        </tr>
                    </form>
        <?php   endif ?>
        <?php endforeach ?>

1 Ответ

4 голосов
/ 14 января 2012

Сложная логика действительно должна быть помещена на сервисный уровень в Symfony2. Шаблоны должны выглядеть чистыми и опрятными для всех разработчиков, не знакомых с PHP (например, фронтенд-разработчики).

Однако в этом шаблоне я не вижу ничего такого, что нельзя было бы сделать в Twig. Вот сложная часть, написанная на Twig, чтобы доказать это:

{% set is_in_registry = false %}
{% for m_item in member_items %}

    {% if m_item.getIid == item.getIid %}
        {% if is_in_registry is false %}
            {% set is_in_registry = true %}
            <tr>
                {# you should use css for styling the td #}
                <td width="50" colspan="6" align="center"><br />Currently asking for:</td>
            </tr>
        {% endif %}

        {{ form.renderFormTag('memberitems/removeitem') }}
        {{ form.item_id.render({ value: item.getIid }) }}
        {{ form.user_id.render({ value: 1 }) }}
        {{ form.id.render({ value: m_item.getMIid }) }}
        {{ form._csrf_token.render }}

        <tr>
            <td width="50" colspan="4" align="center">
                {{ m_item.getMIqty ~ ' @ ' ~ m_item.getMIval }}
            </td>
            <td width="50" colspan="2" align="center"><input type="submit" value="Remove"></td>
        </tr>
        {# didn't notice your form opening tag. I'm assuming you're dynamically generating it #}
        </form>
    {% endif %}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...