Предположим, у меня есть комментарии в нескольких местах на веб-сайте. Как я могу создать что-то вроде {{render_widget ('comments', {"object": object})}}? Это отобразит форму и список со всеми комментариями к этому объекту?Symfony, как создать многоразовый виджет с PHP и twig
ответ
Создание службы:
// src/Acme/HelloBundle/Service/Widget.php
namespace Acme\HelloBundle\Service;
use Symfony\Component\DependencyInjection\ContainerInterface;
class Widget
{
protected $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function getComments()
{
$request = $this->container->get('request'); // use service_container to access request, doctrine, twig, etc...
}
}
Declare службу:
# src/Acme/HelloBundle/Resources/config/services.yml
parameters:
# ...
my_widget.class: Acme\HelloBundle\Service\Widget
services:
my_widget:
class: "%my_widget.class%"
arguments: ["@service_container"]
# scope: container can be omitted as it is the default
Используйте службу в контроллере:
namespace Acme\HelloBundle\Controller;
class BlogController {
public function getPostAction($id) {
// get post from db
$widget = $this->get('my_widget'); // get your widget in controller
$comments = $widget->getComments(); // do something with comments
return $this->render('AcmeHelloBundle:Blog:index.html.twig',
array('widget' => $widget) // pass widget to twig
);
}
}
или прутик, если вы передаете свой сервис в шаблоне как указано выше в render()
функция:
#AcmeHelloBundle:Blog:index.html.twig
{{ widget.getComments()|raw }}
И полезно прочитать документацию о How to work with Scopes
Я сделал это по-другому. Я зарегистрировал расширение Twig с функцией {{комментариев (объект)}}
Функция зарегистрирована таким образом
'comments' => new \Twig_Function_Method($this, 'comments', array(
'needs_environment' => true,
'is_safe' => array('html')
))
Таким образом, мне не нужно указывать | необработанный фильтр.
Что такое 'object' в' {{comments (object)}} '? –
Переменная? : D Прокомментированный объект – CappY
- 1. Как включить многоразовый виджет в Symfony (Twig)?
- 2. Как создать многоразовый виджет в Yii2
- 3. Переводчик Symfony и Twig
- 4. [Symfony + Twig]
- 5. Запрос Symfony и MySQL с Twig
- 6. Как разработать внешний многоразовый пакет Symfony 3
- 7. Как создать viewhelpers с twig
- 8. Symfony 2.1: вставить изображение с PHP скрипт и Twig
- 9. Сгруппированные флажки в Symfony/twig
- 10. Twig без использования Symfony
- 11. Symfony 2 Twig расширение
- 12. Twig Swiftmailer без Symfony
- 13. twig symfony directory separator
- 14. Как создать многоразовый модуль Socket.io
- 15. Как создать многоразовый шаблон rdlc?
- 16. Symfony - Ajax and Twig
- 17. Symfony Учение Visible в Twig
- 18. Symfony Twig Iframe
- 19. Как использовать многоразовый элемент/виджет gui с ресурсами в android
- 20. Symfony/Twig: Как изменить money_pattern?
- 21. Symfony Twig Call Continer
- 22. Symfony 2 и Twig из MySql
- 23. Symfony 2.7.4 twig error
- 24. Отключить кеш Symfony/twig
- 25. Проблемы с Twig и PHP
- 26. Как создать многоразовый экран загрузки?
- 27. Как создать многоразовый код с ember.computed?
- 28. Как создать многоразовый компонент с simpleSchema
- 29. Как создать многоразовый веб-сервис?
- 30. Как создать модальное окно с шаблоном Twig и Twitter-Bootstrap
Возможно, попробуйте использовать [сервис] (http://symfony.com/doc/current/book/service_container.html) для этого? –
Затем передайте эту услугу в шаблон ветки. –
@ Виктор, пожалуйста, дайте мне пример кода. :) – CappY