web-dev-qa-db-ja.com

Symfony2を使用してコントローラー関数を読み込み、twigタグでレンダリングする方法は?

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 }}

値を表示します。

20
Mike

動的データがある場合はajaxを使用できますが、簡単な情報からわかるように、ビューからそのコントローラー関数をいつでも直接実行できます。

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

これに関する詳細情報は、 http://symfony.com/doc/2.0/quick_tour/the_view.html で入手できます。他のコントローラーの埋め込み

23
Stelian

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 を参照してください

36
Dan Blows

記録のために、新しいバージョンでは、絶対URLを使用する必要があります。

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

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

7
iamtankist

Silexでは、次のように解決しました。

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

ルート名がない場合は、URLを使用できます。

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

URLを使用する場合は、常にbaseUrlを連結する必要があります。

4
Raptor

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