-1

假设我有一个基本的 hello world 应用程序,并且我设置了一个像链接一样的会话:

$_SESSION['link'] = "https://foo.com";

现在,我想在我的页面中显示这个会话链接,使用类似这样的树枝:

  <a href="{{ path(app.session.get('filter)')}}">

好吧,假设现在,我需要取消设置会话,使用 AJAX。

我能想到的第一件事就是更新配置

= 路由

AcmeTestBundle_remove:
pattern:  /update/ajax-remove
defaults: { _controller: AcmeTestBundle:update:remove}

= 控制器

public function removeAction(){
  // this is where i am stuck
  unset($_SESSION['link'])
}    

= AJAX

我假设,ajax 设置将是这样的:

function removeAction(){
    $.post('{{path('AcmeTestBundle_remove')}}',               
            function(response){
                    if(response.code == 100 && response.success){
                        //dummy check
                      //do something
                    }

    });    
}

嗯,我显然是新手:任何帮助将不胜感激。

4

2 回答 2

3

不要$_SESSION直接使用。使用Session对象:$this->getRequest()->getSession().

你会在你的控制器中做这样的事情:

** PHP **:
public function removeAction(){
    //....
    //either one of these calls
    $session = $this->getRequest()->getSession(); // Symfony 2.0
    $session = new Session(); // Symfony 2.2+

    $session->remove('link');
    //....

    return new Response("OK", 200); // HTTP-200 status code
}

** HTML **:
 <a id="remove_filter" href="{{ path(app.session.get('filter)')}}">

** JS **:

function removeAction(href){
    $.post(href, function(response){ // you could also use $.get()
        //dummy check
        //do something
        // this is success() callback - means that we have received HTTP-200
    });    
}

$(function(){
    // page is now loaded

    // click handler
    $('#remove_filter').click(function(event){
        event.preventDefault(); // stop default link functionality

        removeAction($(this).attr('href'));
    });
});

如果出于任何原因,控制器抛出错误,您将收到 HTTP-500 状态代码,该代码不会进入您的 JS 回调。

检查此文档:

http://symfony.com/doc/current/components/http_foundation/sessions.html

于 2013-10-10T10:30:48.903 回答
2

对于 AJAX 部分

$(function() {

     $('#session-button').click(function(){
     unsetSession();

});

});    


 function unsetSession() {
        $.ajax({
            url: "{{ path('reset_session') }}",
            type: "post",
            //data: { deal_id: dealId, rating: score },
            dataType: 'json',
            success: function(response){
                if(response.status == 'success') {
                   console.log('success'); 
                } else {

                    console.log('error');
                }
            }   
        });
    }

在控制器中

public function resetSessionAction()
{

    $session = $this->container->get('session');//Symfony 2
    $session->start();//Symfony 2

    $session->set("Link", "");// Symfony 2

    $link = $session->get("Link");

    if(!$Link){
        $response = array(
        'status' => 'success',
    );

    }else{
        $response = array(
        'status' => 'failure',

            );

    }

    $jsonResponse = new Response(json_encode($response));
    $jsonResponse->headers->set('Content-Type', 'application/json; Charset=UTF-8');

    return $jsonResponse;


}
于 2013-10-11T05:51:29.633 回答