symfony1.4和pjax(ajax-pushstate)?

symfony1.4和pjax(ajax-pushstate)?,ajax,symfony1,pushstate,pjax,Ajax,Symfony1,Pushstate,Pjax,symfony: pjax: 大家好 我试图在symfony中使用pjax来加速我们的网站(我们将能够在大多数时间保持页眉和页脚的静态,并且避免重新加载大量css/js和其他文件) 我对ajax或symfony没有问题,但我想知道是否有更好的方法: 使用postExecute立即返回html代码,而不去模板,这是一个好主意吗 如果是这样,我可以为所有模块只写一次吗?我想我能做到: 我的派系扩展了我的行动 moduleActions扩展了我的派系 我想知道有没有更好的办法? 3.有没有办法在控制器

symfony: pjax:

大家好

我试图在symfony中使用pjax来加速我们的网站(我们将能够在大多数时间保持页眉和页脚的静态,并且避免重新加载大量css/js和其他文件)

我对ajax或symfony没有问题,但我想知道是否有更好的方法:

  • 使用postExecute立即返回html代码,而不去模板,这是一个好主意吗
  • 如果是这样,我可以为所有模块只写一次吗?我想我能做到:

    我的派系扩展了我的行动

    moduleActions扩展了我的派系

  • 我想知道有没有更好的办法?
    3.有没有办法在控制器/操作中获取当前布局名称(在模块的view.yml中定义)?

    问题1:不要这样使用post execute。如果您需要在操作中从ajax调用返回html,那么您的操作应该如下所示返回:

    return $this->renderText("<p>Your html result.</p>");
    
    <?php if($sf_request->getParameter('_pjax')):?>
             <script type="text/javascript" src="/js/question_list.js"></script>
    <?php endif;?>
    
    返回$this->renderText(您的html结果。

    ”;
    这将跳过模板调用


    问题2:这是正确的。您已经编写了一次编写函数并使其可用于所有模块操作的最佳方法。

    无事可做

    通过XmlHttpRequest调用操作时,symfony自动跳过布局渲染,只返回模块渲染


    您需要将所有的“静态”资产和html放在布局中,仅此而已。

    谢谢大家的帮助,您的所有回答都很有帮助,并为我指明了正确的方向。我想对两个答案都投赞成票,但因为我只能接受一个,所以我接受了第一个答案

    不管怎样,以下是我所做的:

    首先,我扩展了sfActions类,因此不必在每个模块上都添加preExecute:

    <?php 
    
    class mySfActions extends sfActions{
        public function preExecute(){
            $request = $this->getRequest(); 
            if ($request->getParameter('_pjax')) {
                $this->setLayout(false);
            }       
        }
    }
    
    
    

    这目前对我来说似乎很有效,我很享受支持pushstate时难以置信的加载速度,并且在不支持pushstate时仍然能够回退(例如在dumb IE上)

    你说得对,我忘了这一点。但是仍然需要对javascript做一些事情,因为一旦加载了新内容,我需要加载相应的with js文件。我认为我仍然需要将view.yml中定义的js文件注入到响应头中,而无需添加头。您必须添加include_javascripts();在模板的顶部。嗨,凯文,你能告诉我为什么这样使用post-execute不是一个好方法吗?还有什么更好的方法?Damien在他的回答中解释说,如果我只是想恢复模块布局,我不需要做任何事情,这是真的,但我还需要一种方法将js文件(在每个模块视图.yml中定义)注入到响应头以加载,我认为Post execute不应该用于调用模板。使用预执行或后执行注入公共js文件是一个好主意。另外,如果您想要的话,让ajax返回js也可以。