symfony:http://www.symfony-project.org pjax:https://github.com/defunkt/jquery-pjax
大家好,
我正在尝试在symfony中使用pjax来加速我们的网站(我们将能够在大多数时间保持页眉和页脚静态,并且还避免重新加载大量的css / js和其他文件)。 / p>
我对ajax或symfony没有问题,但我想知道是否有更好的方法:
如果是这样,我可以以某种方式只为所有模块写一次吗?我想我能做到:
mySfActions扩展了sfActions
moduleActions扩展了mySfActions
我想知道是否有更好的方法? 3.有没有办法在控制器/动作中获取当前布局名称(在模块的view.yml中定义)?
答案 0 :(得分:1)
问题1:不要像这样使用后执行。如果您需要在操作中从ajax调用返回html,那么您的操作应该返回如下:
return $this->renderText("<p>Your html result.</p>");
这将跳过模板调用。
问题2:这是正确的。您已经编写了一次编写函数的最佳方法,并将其用于所有模块操作。
答案 1 :(得分:0)
无所事事。
通过XmlHttpRequest调用动作时,symfony会自动跳过布局渲染,只返回模块渲染。
您需要将所有“静态”资源和html放在布局中,这就是全部。
答案 2 :(得分:0)
谢谢大家帮助我,你的所有答案都很有帮助,并指出了正确的方向。我想投票给两个答案,但由于我只能接受一个,我接受了第一个答案。
无论如何,这就是我所做的:
首先,我扩展了sfActions类,所以我不必在每个模块上添加preExecute:
<?php
class mySfActions extends sfActions{
public function preExecute(){
$request = $this->getRequest();
if ($request->getParameter('_pjax')) {
$this->setLayout(false);
}
}
}
当然,我的每个模块动作类都必须扩展这个新类。
在我的个人模板中,我有类似的内容:
<?php if($sf_request->getParameter('_pjax')):?>
<script type="text/javascript" src="/js/question_list.js"></script>
<?php endif;?>
这对我来说似乎运行得很好,我很享受支持pushstate时令人难以置信的加载速度,并且当它不支持时仍然能够回退(例如,在愚蠢的IE上)