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 }}
値を表示します。
動的データがある場合はajaxを使用できますが、簡単な情報からわかるように、ビューからそのコントローラー関数をいつでも直接実行できます。
{% render "MyMyBundle:User:generateCode" with { 'url': 'your url here' } %}
これに関する詳細情報は、 http://symfony.com/doc/2.0/quick_tour/the_view.html で入手できます。他のコントローラーの埋め込み
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 を参照してください
記録のために、新しいバージョンでは、絶対URLを使用する必要があります。
{{ render url('my_route_id', {'param': value}) }}
{{render(controller( "AcmeDemoBundle:Demo:topArticles"、{'num':10}))}}
Silexでは、次のように解決しました。
{{ render(url('route_name', {'param': value})) }}
ルート名がない場合は、URLを使用できます。
{{ render(app.request.baseUrl ~ '/some-path/' ~ value) }}
URLを使用する場合は、常にbaseUrlを連結する必要があります。
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,
]);
}