3

私のコントローラーメソッドは、従来のブラウザーリクエストを処理することと、マップされたリソースを使用してRESTクライアントを介して対話することの両方を目的としています。

ケース:これは、すべての検証をCakeモデルに集中させながら、Model::validationErrorsを抽出してjson応答に追加することで検証できる優れたajaxフォームを保持できるので便利です。フォームがajaxであるかどうかを気にしない場合、クライアント側のjavascriptを適用することはできず、フォームとサーバーは正常に通信します。

問題:多くのコントローラーアクションはController :: redirect()に依存しています。redirect()をオーバーライドしたり、beforeRedirect()を試したりすることで、ajaxリクエスト中にリダイレクトをJSON応答に変換する信頼できる方法が見つかりません。これは、「redirectUrl」=>「foo」のようなものを示します。ブラウザajaxの場合)は、javascriptロケーションリダイレクトを使用してユーザーを新しいURLに転送できます。

私はそれが機能していると思いましたが、許可されていないユーザーが出力を見ていなくても保護されたリソースを実行するためのアクセス権を持っていることに気付きました。

4

1 に答える 1

0

次のような2つのキーでjson配列を使用できます

$json['status'] => 'success',
$json['url'] => 'router::url ("/",array("controller" => "yourcontroller",
                  "action" => "youraction"))';
// url where you want redirect after some processing

return json_encode($json);

//あなたからのスクリプトで ajax リクエストを送信しました:

if(json['status'] == 'success'){
   window.location.href = json['url'];
}
于 2013-03-29T12:34:45.740 に答える