0

我在数据库中有两个表。其中一个包含应用程序的用户,另一个以多对一的关系保存一些关于他们的医疗报告,因此每个用户可以在信息表中拥有随机数量的医疗报告。

我想在屏幕左侧显示用户名列表,这很简单。每次我点击其中一个人的名字时,我都会进入另一个显示医疗数据的页面,我必须返回再次获取用户列表。但是,我希望在同一个视图中显示此信息,因此每次单击左侧的名称时,我都会在右侧获取他或她的数据,当我单击另一个用户时,会显示前一个用户的信息消失并显示新的。我的意思是,我想要与旧的 HTML iframe 或新的 Android 4 片段类似的行为。

这在 Symfony2/Twig 中可行吗?

4

1 回答 1

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>
于 2012-12-03T20:33:23.543 回答