いくつかの 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 設定でこれを行う方法がわかりません。