symfony1.4和pjax(ajax-pushstate)?
symfony: pjax: 大家好 我试图在symfony中使用pjax来加速我们的网站(我们将能够在大多数时间保持页眉和页脚的静态,并且避免重新加载大量css/js和其他文件) 我对ajax或symfony没有问题,但我想知道是否有更好的方法: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.有没有办法在控制器
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也可以。