Спасибо всем за помощь, все ваши ответы были полезны и указали мне правильное направление. Я хотел проголосовать за оба ответа, но поскольку я могу принять только один, я принял самый первый ответ.
Во всяком случае, вот что я сделал:
Во-первых, я расширил класс 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, например)