我在数据库中有两个表。其中一个包含应用程序的用户,另一个在ManyToOne关系中保存一些关于它们的医疗报告,因此每个用户都可以在信息表中随机抽取一些医疗报告。
在屏幕左侧,我想显示用户姓名列表,这是一件容易的事。每当我点击其中一个的名字时,我会进入另一个显示医疗数据的页面,我必须再次返回用户列表。但是,我希望在同一视图中显示此信息,因此每次单击左侧的名称时,我都会在右侧显示他或她的数据,当我点击其他用户时,前一个用户的信息消失,新的显示。我的意思是,我想要一个与旧的HTML iframe相似的行为,或者新的Android 4碎片。
这在Symfony2 / Twig中是否可行?
答案 0 :(得分:1)
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>