Подтвердить что ты не робот

Как загрузить функцию контроллера и отобразить ее в теге twig с помощью Symfony2?

Я использую Symfony2 и Twig. У меня есть функция (ниже) в моем контроллере, которая возвращает определенный текст. Можно ли вызвать эту функцию непосредственно из моего шаблона и изменить {{text}} в моем шаблоне на то, что возвращает функция, возможно через 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 }}

чтобы отобразить значение.

4b9b3361

Ответ 1

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

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

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

Ответ 2

В 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

Ответ 3

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

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

Ответ 4

{{render (контроллер ( "AcmeDemoBundle: Demo: topArticles", {'num': 10}))}}

Ответ 5

В Silex я решил это следующим образом:

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

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

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

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

Ответ 6

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,
    ]);
}