在CakePHP中,覆盖AppController的redirect()以在ajax请求期间通过json响应url

时间:2013-03-19 21:35:56

标签: php rest cakephp authentication

我的控制器方法有两个目的:处理传统的浏览器请求和使用映射资源通过REST客户端进行交互。

案例:这很方便,因为我可以将所有验证集中在Cake模型中,并且仍然有很好的ajax表单,我可以通过提取Model :: validationErrors并将它们添加到json响应来验证。我不关心表单是否为ajax,我只是不能应用我的客户端javascript,表单和服务器正常通信。

问题:许多控制器操作依赖于Controller :: redirect()。通过重写redirect(),尝试beforeRedirect()等,我找不到在ajax请求期间将重定向转换为JSON响应的可靠方法,这将指示类似'redirectUrl'=>的内容。 'foo'以便我的客户端(在浏览器ajax的情况下)可以使用javascript位置重定向将用户转发到新网址。

我认为我已经开始工作,但意识到未经授权的用户有权访问运行受保护的资源,尽管没有看到他们的输出。

1 个答案:

答案 0 :(得分:0)

您可以使用带有两个键的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'];
}