0

symfony:http: //www.symfony-project.org pjax:https ://github.com/defunkt/jquery-pjax

こんにちは、みんな、

私はウェブサイトを高速化するためにsymfonyでpjaxを使用しようとしています(ほとんどの場合、ヘッダーとフッターを静的に保つことができ、多くのcss / jsやその他のファイルのリロードを回避できます)。

ajaxやsymfonyに問題はありませんが、もっと良い方法があるかどうか知りたいです。

  1. postExecuteを使用して、sfがテンプレートにまったくアクセスせずにhtmlコードをすぐに返すことをお勧めしますか?
  2. もしそうなら、どういうわけか私はこれをすべてのモジュールに対して一度だけ書くことができますか?私は私ができることを想像します:

    mySfActionsはsfActionsを拡張します

    moduleActionsはmySfActionsを拡張します

もっと良い方法があるのだろうか?3.コントローラー/アクション内で現在のレイアウト名(モジュールのview.ymlで定義されている)を取得する方法はありますか?

4

3 に答える 3

1

質問1:そのような実行後は使用しないでください。アクションでajax呼び出しからhtmlを返す必要がある場合、アクションは次のように返されます。

return $this->renderText("<p>Your html result.</p>");

これにより、テンプレート呼び出しがスキップされます。

質問2:その通りです。関数を一度記述して、すべてのモジュールアクションで使用できるようにするための最良の方法を記述しました。

于 2011-07-13T15:13:13.887 に答える
0

やることが何もない。

XmlHttpRequestを介してアクションを呼び出す場合、symfonyは自動的にレイアウトレンダリングをスキップし、モジュールレンダリングのみを返します。

すべての「静的」アセットとhtmlをレイアウトに配置する必要があります。それだけです。

于 2011-07-13T17:01:43.487 に答える
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で)

于 2011-07-27T10:39:36.650 に答える