2011-06-23 10 views
1

私のWebアプリケーションでは、常にJSONでAJAX呼び出しに返信します。自動的にそれを取得する方法はありSymfony 1 - すべてのAJAXリクエストに対して自動的にJSONコンテンツタイプを設定します。

if ($request->isXmlHttpRequest()) { 
    $this->getResponse()->setHttpHeader('Content-type', 'application/json'); 
    return $this->renderText(json_encode($details)); 
} 


はこのように私は自分自身の行動の多くにこれをやって見つけるの要求がAJAXでいつでも、コンテンツタイプがJSONは何ですか?

私はフィルターを使用すべきだと思っていましたが、私はフィルターに精通していませんし、もっと良い解決法があるかもしれません。

ご迷惑をおかけ致しますが、何卒ご了承ください。

おかげで、
ダン

答えて

3

私はそれを解決方法:

sfActionsから拡張する新しいクラスmyActionsを作成します。このクラスでは新しい機能renderJson($data)作成:

protected function renderJson($data) { 
    $this->getResponse()->setHttpHeader('Content-type', 'application/json'); 
    return $this->renderText(json_encode($data)); 
} 

を今すぐmyActions(代わりのsfActions)から、あなたのコントローラクラスを継承してみましょう。あなたのコントローラーの終わりにちょうどreturn $this->renderJson($data);

(私もいくつかのテンプレートをしました。renderJsonで、sf_debugが設定に設定され、そしてそれはXMLHTTPを通じて要求していない場合。)

0

私は私のプロジェクトの一つに類似の技術を使用していますが、私はまた、this article iPhoneの最適化について見てみることをお勧めします。フォーマットを受け入れるようにルーティングを設定し、それに基づいて適切なテンプレートを返すことができます。次に、要求されたフォーマットで設定されているヘッダーを設定する必要はありません。

もちろん、出力テンプレートごとに別々のテンプレートファイルを作成する必要があります。これは気になるようです。または、特定のレイアウトファイルを使用してテンプレートをスキップしてください。だから、結局は同じことになるかもしれません(あるいは少なくとも同じコード量)。