Как загрузить функцию контроллера и отобразить ее в тэге с помощью Symfony2? - PullRequest
20 голосов
/ 28 ноября 2011

Я использую Symfony2 и Twig.У меня есть функция (ниже) в моем контроллере, который возвращает определенный текст.Можно ли вызвать эту функцию непосредственно из моего шаблона и изменить {{текст}} в моем шаблоне на то, что функция возвращает, возможно, через Ajax?

Вот моя функция:

public function generateCode($url) {
    $url = $_SERVER['SERVER_NAME'] . '/embed/' . $url;
    $return = '<iframe>'.$url.'</iframe>';
    return $return;
}

Другая функция контроллера вызывает функцию выше и отображает мой шаблон:

public function getCodeAction($url) {
    $text = $this->generateCode($url);
    return $this->render('MyMyBundle:User:code.html.twig', array('text' => $text));
}

В моем шаблоне я использую:

{{ text }}

для отображения значения.

Ответы [ 6 ]

36 голосов
/ 07 февраля 2013

В Symfony 2.2 это было изменено.

Изменены подпись и аргументы тега рендеринга.

До:

{% render 'BlogBundle:Post:list' with { 'limit': 2 }, { 'alt': BlogBundle:Post:error' } %}

После:

{% render controller('BlogBundle:Post:list', { 'limit': 2 }), { 'alt': 'BlogBundle:Post:error' } %}

или

{{ render(controller('BlogBundle:Post:list', { 'limit': 2 }), { 'alt': 'BlogBundle:Post:error'}) }}

Примечание: функция является предпочтительным способом.

См. https://github.com/symfony/symfony/blob/2.2/UPGRADE-2.2.md

23 голосов
/ 28 ноября 2011

Вы можете использовать ajax, если у вас есть динамические данные, но, насколько я могу судить из вашей краткой информации, вы всегда можете выполнить эту функцию контроллера прямо из своего представления:

{% render "MyMyBundle:User:generateCode" with { 'url': 'your url here' } %}

Более подробная информация об этом доступна по адресу: http://symfony.com/doc/2.0/quick_tour/the_view.html, в разделе Встраивание других контроллеров

9 голосов
/ 14 марта 2014

Для записи в новых версиях необходимо использовать абсолютный URL:

{{ render url('my_route_id', {'param': value}) }}
7 голосов
/ 24 апреля 2014

{{render (controller ("AcmeDemoBundle: Demo: topArticles", {'num': 10}))}}

4 голосов
/ 28 октября 2014

В Silex я решил это так:

{{ render(url('route_name', {'param': value})) }}

Если у вас нет имени маршрута, можно использовать URL:

{{ render(app.request.baseUrl ~ '/some-path/' ~ value) }}

Если вы используете URL, мы всегда должны указыватьbaseUrl.

2 голосов
/ 28 марта 2016

Symfony 2.6 +

в ветке:

{{ render(controller('AppBundle:PropertySearch:featuredProperties', {'limit': 15})) }}

контроллер:

/**
 * featuredPropertiesAction
 * 
 * @param Request $request
 * @param int $limit
 *
 * @return Response
 */
public function featuredPropertiesAction(Request $request, $limit)
{
    $search = $this->resultsHelper->featuredSearch($limit);

    return $this->render('HASearchBundle::featured_properties.html.twig', [
        'search' => $search,
    ]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...