2012-01-13 84 views
4

我在一個網站上使用了.twig模板,但是我需要在幾個視圖上使用邏輯很狡猾。我不認爲樹枝可以處理這個問題,並且它是PHP中的一塊蛋糕。 (我不會解釋這是什麼的細節,只需知道它在PHP中的簡單性,而且我已經有了代碼)。問題是,我可以在.twig類型的基本模板或父模板中包含.PHP模板嗎?在.php模板中包含一個.twig基本模板

例以下(不工作) - blah.html.php是它擴展了base.html.twig模板模板...

/一些/ web /目錄/軟件包名/資源/視圖/嗒嗒/ 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(IE它不會由模板引擎執行)。

PS - 是的,我有兩個.twig和.PHP在app /配置/ 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 ?> 
+0

什麼樣的複雜的東西?你可以把它放在一個小枝函數或宏。 – solarc 2012-01-13 19:14:41

+0

卡洛斯 - 我已經更新了一些關於複雜東西的細節問題......這只是我稱之爲複雜東西的一個例子,複雜的我指的是對.twig複雜,因爲我不認爲樹枝被設計爲處理邏輯這個。 (我可能是錯的)。 – ElasticThoughts 2012-01-13 19:24:37

回答

4

複雜的邏輯應該被放置在Symfony2的服務層。對於所有不熟悉PHP的開發人員(例如前端開發人員),模板應該看起來乾淨整潔。

但是,我沒有看到該模板中無法在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 %} 
+0

gilden - 謝謝你上面的代碼!我完全同意,「棘手」的東西甚至不應該在視圖中。我不知道樹枝有能力聲明變量,這可能會解決90%的複雜代碼。我應該能夠將其他10%移出並進入服務。 – ElasticThoughts 2012-01-13 21:09:12

+0

@CocoaNoob Twig非常強大,並且提供的可擴展性真的沒有限制。如果您還沒有做到這一點,我建議您閱讀(非常簡短)[手冊](http://twig.sensiolabs.org/documentation)以充分利用Twig。 – gilden 2012-01-13 21:13:11

+0

會做 - 我閱讀symfony.com網站(http://symfony.com/doc/current/book/templating.html)上的簡短介紹,而不是(http://twig.sensiolabs.org)上的信息。 。接下來就是!再次感謝! – ElasticThoughts 2012-01-13 21:32:18