Twig は単なるテンプレート エンジンです。サーバー側で解析され、生の HTML/CSS/JS がブラウザーに返されます。Twig でユーザーとの対話を記述することはできません。
Symfony はサーバー側のフレームワークです。つまり、サーバー側で解析され、生の HTML/CSS/JS がブラウザーに返されます。Symfony を使用してユーザーとのやり取りを記述することはできません。
JavaScript などのクライアント側のスクリプト言語を使用する必要があります。問題を解決するために AJAX リクエストを作成できます。AJAX は URL を要求し、その URL のコンテンツをページに表示します。AJAX は JavaScript で最もクロスブラウザー化されていないものの 1 つであるため、MooTools や jQuery などのライブラリーを使用することをお勧めします。
AJAX リクエスト用の RESTful API を作成することをお勧めします。のようなもの/users/{id}
がユーザー情報を表示するはずです。/users/{id}
そのために、ユーザー データを表示するコントローラーを作成し、それをルートにマップします。
<?php
// src/Acme/DemoBundle/Controller/UserController.php
namespace Acme\DemoBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class UserController extends Controller
{
// ...
/**
* @Route("/users/{id}")
*/
public function showAction($id)
{
// select user by id
$user = ...;
// renders the user data
$this->render('AcmeDemoBundle:User:show.html.twig', array('user' => $user));
}
}
次に、その URL への AJAX リクエストを作成して、ユーザー データを取得します。
<ul>
<li><a class="js-show-user" data-id="1">Joren</a></li>
<li><a class="js-show-user" data-id="2">Wouter</a></li>
<!-- ... -->
</ul>
<div id="js-user-data"></div>
<!-- ... include jquery -->
<script>
jQuery(function($) {
var output = $('#js-user-data');
$('.js-show-user').click(function(e) {
jQuery.ajax({
url: '/users/' + $(this).data('id'), // request the correct url
success: function (result) {
output.html(result); // output the result
},
});
});
});
</script>