Intereting Posts
Не можете вызвать закрытие, завернутое в закрытие? PHP-код для вставки значения флажка в spesific-столбец в mysql с формой выбора Скрытие div с использованием php Проблема с получением изображения из общей папки с отношением «один к одному» Как получить продукты из определенной категории в magento электронной коммерции Как я могу отправить данные с веб-страницы на последовательный порт компьютера посетителя? PHP change DOM useragent Отправить электронное письмо на адрес из ввода формы Аутентификация прокси-сервера с помощью cURL WAMPSERVER – обновлять версию PHP только с 5.4.3 до 5.5.4 Установка разрешений в двоичном формате preg_match, чтобы найти слово, которое заканчивается определенным символом Как закрепить всю папку с помощью PHP Мне нужно объяснение класса-оболочки с примером, что ребенок поймет Сводный запрос MongoDB с использованием драйвера PHP

Шаблон Twig не может содержать шаблон php

Я столкнулся с проблемой, которая для меня совершенно непонятна и трудно понять. Я попытался создать виджет календаря, который должен отображаться на каждой странице моего сайта. Итак, я думаю, что это должен быть средний шаблон (никаких аргументов, ни одного сайта). Я попытался сделать это как шаблон ветви. Мне удалось отобразить календарь, но у меня возникла проблема с приобретением объекта даты (что необходимо для получения правильных аргументов для рендеринга календаря). Через некоторое время я попытался создать шаблон php, который будет включен в основной шаблон ветви (layout.html.twig). Это не успех. Я включил php engine в config.yml, но не помог – php-шаблон на самом деле включен, но как обычный файл, а не php-файл (не анализируется как php-скрипт) (но работает php-движок, я пытался отобразить php шаблон от контроллера он работает). Я прочитал также, что можно включить результат от другого контроллера в шаблон, но для меня это не правильное решение, я не пробовал (шаблон php должен соответствовать этой проблеме).

Что мне делать, чтобы решить эту проблему?

Главная config.yml

imports: - { resource: parameters.ini } - { resource: security.yml } framework: #esi: ~ translator: { fallback: %locale% } secret: %secret% charset: UTF8 router: { resource: "%kernel.root_dir%/config/routing.yml" } form: true csrf_protection: true validation: { enable_annotations: true } templating: { engines: ['twig', 'php'] } session: default_locale: %locale% auto_start: true # Twig Configuration twig: debug: %kernel.debug% strict_variables: %kernel.debug% # Assetic Configuration assetic: debug: %kernel.debug% use_controller: false # java: /usr/bin/java filters: cssrewrite: ~ # closure: # jar: %kernel.root_dir%/java/compiler.jar # yui_css: # jar: %kernel.root_dir%/java/yuicompressor-2.4.2.jar # Doctrine Configuration doctrine: dbal: driver: %database_driver% host: %database_host% port: %database_port% dbname: %database_name% user: %database_user% password: %database_password% charset: UTF8 orm: auto_generate_proxy_classes: %kernel.debug% auto_mapping: true # Swiftmailer Configuration #swiftmailer: # transport: %mailer_transport% # host: %mailer_host% # username: %mailer_user% # password: %mailer_password% jms_security_extra: secure_controllers: true secure_all_services: false # services: # TpsaMailer: # class: Tpsa\TestBundle\Controller\MailerController 

layout.html.twig

 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> {% block stylesheets %} <link rel="stylesheet" type="text/css" href="{{ asset('bundles/tpsablog/css/main.css') }}"> {% endblock %} {% block javascripts %} <!-- empty javascripts --> {% endblock %} <title> {% block title %} {% trans %}blog.programisty.duga{% endtrans %} {% endblock %} </title> </head> <body> <div id="all"> <div id="top"> {% block top %} <div style="float: left" class="right"> <img style="float: left; vertical-align: middle; margin: 8px 8px 8px 0px" src="{{ asset('bundles/tpsablog/images/glider.png') }}"> <h4>{% trans %}blog.programisty.duga{% endtrans %}</h4> <div style="font-size: 8px"> {% trans %}ciekawosc.wiedza.niewygodne{% endtrans %} <!-- Ciekawość i wiedza... To, co jest niewygodne dla władzy --> </div> </div> <div style="float: right"> <a href="{{ path('HomePage') }}">{% trans %}strona.glowna{% endtrans %}</a> <a href="{{ path('AboutPage') }}">{% trans %}o.mnie{% endtrans %}</a> <a href="{{ path('TBB_mess_add') }}">{% trans %}napisz.do.mnie{% endtrans %}</a> {% if is_granted('IS_AUTHENTICATED_FULLY') %} {{ app.user.username }} <a href="{{ path('TBB_tag_list_homepage') }}">{% trans %}tagi{% endtrans %}</a> <a href="{{ path('TBB_mess_list_homepage') }}">{% trans %}wiadomosci{% endtrans %}</a> <a href="{{ path('logout') }}">{% trans %}wyloguj{% endtrans %}</a> {% else %} <a href="{{ path('login') }}">{% trans %}zaloguj{% endtrans %}</a> {% endif %} <div style="text-align: center; margin: 10px 0px"> <a href="{{ path('TBB_rss') }}"> <img src="{{ asset('bundles/tpsablog/images/rss.png') }}" alt="rss channel"> </a> <a href="http://www.facebook.com/duga.chernobyl" target="_blank"> <img src="{{ asset('bundles/tpsablog/images/facebook.png') }}" alt="facebook"> </a> <a href="http://www.youtube.com/user/DugaEye" target="_blank"> <img src="{{ asset('bundles/tpsablog/images/youtube.png') }}" alt="youtube"> </a> </div> </div> <div style="clear:both"></div> {% endblock %} </div> <div id="frame"> <div id="left"> {% block content %} {% trans %}TODO{% endtrans %} {% endblock %} </div> <div id="right"> {% block panel %} <div style="text-align: left"> <div style="text-align: center"> <h4>{% trans %}profil.duga.eye{% endtrans %}</h4> <img style="width: 100px" src="{{ asset('bundles/tpsablog/images/photo.jpg') }}"> </div> <div style="font-weight:900; margin-top: 10px"> <ul> <li>{% trans %}wiek{% endtrans %}: 21</li> <li>{% trans %}miejsce{% endtrans %}: /dev/null</li> <li>{% trans %}zainteresowania{% endtrans %}: {% trans %}programowanie.hacking.filozofia{% endtrans %}</li> <li>{% trans %}email{% endtrans %}: <a href="mailto:duga(dot)eye(at)gmx(dot)com">Mail</a> </ul> </div> </div> <h3>{% trans %}reklamy{% endtrans %}</h3> {% include '::calendar.html.php' %} {% endblock %} </div> </div> <div id="footer"> {% block footer %} {% trans %}footer{% endtrans %} {% endblock %} </div> </div> </body> </html> 

Как получить правильные параметры смещения, числа, koniec, aktualny от объекта php Date? (теперь он жестко закодирован)

calendar.html.twig

 {% include '::calendar.html.php' %} {% set offset = 1 %} {% set number = 28 %} {% set koniec = 7 - ((offset + number) % 7) %} {% set aktualny = 13 %} <table border="0" style="text-align: center"> <thead> <tr> <td>{% trans %}pn{% endtrans %}</td> <td>{% trans %}wt{% endtrans %}</td> <td>{% trans %}sr{% endtrans %}</td> <td>{% trans %}czw{% endtrans %}</td> <td>{% trans %}pt{% endtrans %}</td> <td>{% trans %}sob{% endtrans %}</td> <td>{% trans %}nie{% endtrans %}</td> </tr> <tbody> {% if offset % 7 != 0 %} <tr> {% for i in range(0,offset-1,1) %}<td><br></td>{% endfor %} {% endif %} {% for i in 1..number %} {% if (i+offset)%7 == 1 %}<tr>{% endif %} <td> {% if i == aktualny %} <span style="color: red">{{ i }}</span> {% else %} {{ i }} {% endif %} </td> {% if (i+offset)%7 == 0 %}</tr>{% endif %} {% endfor %} {% if koniec < 7 %} {% for i in 1..koniec %} <td><br></td> {% endfor %} </tr> {% endif %} </tbody> </table> 

php, который должен быть выполнен как шаблон php, включив его в шаблон ветви, но он не анализируется и не выполняется как один шаблон.

calendar.html.php

 ppp<?php echo ('ala') ?>ooo 

Просто включает в себя «pppooo» в источнике, не видимый, обрабатываемый как тег html.

deps file, если это необходимо

 [symfony] git=http://github.com/symfony/symfony.git version=v2.0.9 [twig] git=http://github.com/fabpot/Twig.git version=v1.5.1 [monolog] git=http://github.com/Seldaek/monolog.git version=1.0.2 [doctrine-common] git=http://github.com/doctrine/common.git version=2.1.4 [doctrine-dbal] git=http://github.com/doctrine/dbal.git version=2.1.5 [doctrine] git=http://github.com/doctrine/doctrine2.git version=2.1.5 [swiftmailer] git=http://github.com/swiftmailer/swiftmailer.git version=v4.1.5 [assetic] git=http://github.com/kriswallsmith/assetic.git version=v1.0.2 [twig-extensions] git=http://github.com/fabpot/Twig-extensions.git [metadata] git=http://github.com/schmittjoh/metadata.git version=1.0.0 [SensioFrameworkExtraBundle] git=http://github.com/sensio/SensioFrameworkExtraBundle.git target=/bundles/Sensio/Bundle/FrameworkExtraBundle version=origin/2.0 [JMSSecurityExtraBundle] git=http://github.com/schmittjoh/JMSSecurityExtraBundle.git target=/bundles/JMS/SecurityExtraBundle version=origin/1.0.x [SensioDistributionBundle] git=http://github.com/sensio/SensioDistributionBundle.git target=/bundles/Sensio/Bundle/DistributionBundle version=origin/2.0 [SensioGeneratorBundle] git=http://github.com/sensio/SensioGeneratorBundle.git target=/bundles/Sensio/Bundle/GeneratorBundle version=origin/2.0 [AsseticBundle] git=http://github.com/symfony/AsseticBundle.git target=/bundles/Symfony/Bundle/AsseticBundle version=v1.0.1 

Related of "Шаблон Twig не может содержать шаблон php"

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

Я думаю, что документация по Symfony должна / могла бы быть более ясной об этом (на данный момент в основном говорится: «Позвольте им обоим и делать то, что вам нравится»).

Если вы встраиваете другой контроллер, вы должны иметь возможность обслуживать другой ответ и что ответ может быть основан на php.

Рассматривали ли вы создание своего шаблона php календаря, используя {% render 'ApplicationBundle:Controller:action' %} и в действии, отображающем шаблон php?

Вы также можете отобразить свой php календаря в действии, которое отображает ветку календаря, и передать результат шаблона php в качестве простой переменной веточки.

Примечание. Чтобы отобразить такой var, не забудьте сделать {{ var|raw }} если внутри есть какой-либо html-тег.

Примечание2: как и в symfony2.2, параметр рендеринга изменился на {% render url('route_name') %}

ПРИМЕЧАНИЕ. Ниже приведенные ниже фрагменты полностью не проверены.

http://twig.sensiolabs.org/doc/functions/date.html

Дата функции, похоже, создает объект \ DateTime.

 {% set now = date() %} {% set offset = date(now.format('Y/m/01')).format(w) %} {# weekday of 1st day #} {% set number = now.format('t') %} {# days in month #} {% set koniec = 7 - ((offset + number) % 7) %} {% set aktualny = now.format('n') %} {# today #} 

Однако, если вы хотите включить оригинальный файл php (скажем, «calendar.php») в twig, вам нужно написать расширение, чтобы заставить его работать.

 class CalendarExtension extends \Twig_Extension { private $pathToPhp; //store that where the php file is public function setPhpFile($pathToPhp) { $this->pathToPhp = $pathToPhp; } public function getFunctions() { return array( new \Twig_SimpleFunction('calendar', array($this, 'showCalendar')) ); } public function showCalendar([put arguments here if you need]) { ob_start(); include ($this->pathToPhp); return ob_get_clean(); } } 

Чтобы сделать работу выше, вы должны создать «помеченную» службу в контейнере.

 in app/config/config.yml services: calendar_twig_extension: class: __Namespace__\CalendarExtension calls: - [setPhpFile, [__path to your calendar.php__]] tags: - [name: twig.extension] 

слова, которые должны быть заменены двумя словами:

  • _ _ Пространство имен _ _: Пространство имен CalendarExtension
  • _ _ путь к вашему calendar.php _ _: полный путь к вашему calendar.php. Вы можете использовать такие параметры, как% kernel.root_dir% и т. Д., Чтобы управлять своим проектом по пути.

При этом вы, наконец, можете просто написать

 {{ calendar([arguments for CalendarExtension::showCalendar]) }}