0

いくつかの ajax アクションを追加した結果、CakePHP アプリで問題が発生しました。

私のテーブルが呼び出されるordersので、明らかに私のコントローラーが呼び出されOrdersController、モデルが呼び出されますOrder

Orderモデルで何らかのロジックを実行する場合は、 OrdersController. これは基本的な CRUD には問題ありませんが、一部のビューでOrderデータを操作するために ajax リクエストを送信する必要があるため、問題が発生しています。

問題は、ajax が適切に機能するためには、これを最初に配置する必要があることです。OrdersController

var $layout = 'ajax';  // uses an empty layout
var $autoRender=false; // renders nothing by default

次に、セキュリティー・コンポーネントが Ajax フォームの送信に干渉するのを止めるには、以下も必要です。

public function beforeFilter() {
    parent::beforeFilter();
    $this->Security->csrfUseOnce = false;
    $this->Security->csrfExpires = '+1 hour';
}

コントローラーが Ajax リクエストにのみ使用されている場合、これは問題になりませんが、通常の Cake アクションにも使用されていることが問題です。

コントローラーが2つあればいいというのが答えでしょうか。1つは通常のアクション用で、もう1つはajaxアクション用ですか? これは Cake のドキュメントでは言及されていないようで、非常に効率的な方法とは思えません。

アクションごとにレイアウトと自動レンダリング設定を変更できることはわかっていますが、beforeFilter に必要な csrf 設定でこれを行う方法がわかりません。

4

1 に答える 1

1

別のコントローラーは必要ありません。Cakes リクエスト ハンドラを使用します。コントローラー メソッドで、それが Ajax リクエストかどうかをテストできます。

if ($this->request->is('ajax')) {
    //set to Ajax layout and security settings, etc

コントローラーの上部にリクエスト ハンドラー コンポーネントを含める必要があります。

public $components = array('RequestHandler');

詳細については、クックブックのこのページを参照してください: http://book.cakephp.org/2.0/en/core-libraries/components/request-handling.html

于 2012-07-13T08:43:17.207 に答える