我在一个数据库中有两个表。其中一个包含应用程序的用户,另一个以ManyToOne关系保存有关他们的一些医疗报告,因此每个用户都可以在info表中拥有随机数量的医疗报告。
在屏幕的左边,我想要显示用户名的列表,这是一件很容易做的事情。每次我点击其中一个人的名字,我就会转到另一个显示医疗数据的页面,我必须返回以再次获得用户列表。然而,我想让这些信息出现在同一视图中,所以每次我点击左边的名字时,我都会在右边看到他或她的数据,而当我点击另一个用户时,前一个用户的信息就会消失,新的信息就会显示出来。我的意思是,我想要一个与旧的HTML iframe或新的Android4片段类似的行为。
这在Symfony2/Twig中是可能的吗?
发布于 2012-12-04 04:33:24
Twig只是一个模板引擎,它在服务器端被解析,原始的HTML/CSS/JS被返回给浏览器,你不能用Twig编写与用户的交互。
Symfony是一个服务器端框架,这意味着它在服务器端被解析,原始的HTML/CSS/JS被返回给浏览器,你不能用Symfony编写与用户的交互。
您需要使用客户端脚本语言,如JavaScript。您可以创建AJAX请求来解决您的问题。AJAX请求一个url并在页面上显示该url的内容。由于AJAX是JavaScript中最不能跨浏览器的东西之一,因此建议使用MooTools或jQuery这样的库。
我建议为RESTful请求创建一个AJAX 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>
https://stackoverflow.com/questions/13689359
复制相似问题