0

データベースに 2 つのテーブルがあります。それらの 1 つはアプリケーションのユーザーを含み、もう 1 つはそれらに関するいくつかの医療レポートを ManyToOne 関係で保持するため、すべてのユーザーが情報テーブルにランダムな数の医療レポートを持つことができます。

画面の左側に、ユーザーの名前のリストを表示したいのですが、これは簡単なことです。そのうちの 1 つの名前をクリックするたびに、医療データを表示する別のページに移動し、ユーザーのリストを再度取得するために戻る必要があります。ただし、この情報を同じビューに表示したいので、左側の名前をクリックするたびに右側にそのユーザーのデータが表示され、別のユーザーをクリックすると前のユーザーの情報が表示されます消えて新しいものが表示されます。つまり、古い 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 で最もクロスブラウザー化されていないものの 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>
于 2012-12-03T20:33:23.543 に答える