Twig 只是一个模板引擎,它在服务器端进行解析并将原始 HTML/CSS/JS 返回给浏览器,你不能在 Twig 中编写与用户的交互。
Symfony 是一个服务器端框架,这意味着它在服务器端进行解析,并将原始 HTML/CSS/JS 返回到浏览器,您无法使用 Symfony 编写与用户的交互。
您需要使用客户端脚本语言,例如 JavaScript。您可以创建 AJAX 请求来解决您的问题。AJAX 请求一个 url 并在页面上显示该 url 的内容。由于 AJAX 是 JavaScript 中最不跨浏览器的东西之一,因此建议使用 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>