我正在尝试使用ajax在我的应用程序中调用一个函数。问题是我不希望函数调用cakephp的beforeFilter函数。
$.ajax({
dataType: 'json',
url: '/users/add/'+id,
success: function(data){
}
});
public function add($id = NULL)
{
echo "test";
die;
}
每当我使用ajax调用时,cakephp都会加载beforeFilter函数。
有没有办法绕过beforeFilter函数?
感谢。
答案 0 :(得分:2)
实现目标的更好方法 你要做的就是:
function beforeFilter() {
if (in_array($this->action, array('list', 'protected', 'actions',
'here')) {
// Do your authentication
}
}
答案 1 :(得分:2)
CakePHP's 'Request Life-cycle callbacks'是一件非常方便的事情。它们在那里,因此您不必为每个控制器实现这样的逻辑,也是CakePHP's MVC paradigm的集成部分。 Look here有关Cake的模型,视图和控制器包装器的更多信息。
您可以通过Controller的implementedEvents()
功能完全删除此(或任何)回调,但强烈建议您不要这样做。
@thaJeztah的解决方案是两种可能的解决方案之一。
但为什么你需要绕过beforeFilter()
?是否有一个非常强大的东西推动你这样做?
您还可以跳过beforeFilter()
中的所有ajax请求,例如:
public function beforeFilter()
{
if ( !$this->request->is('ajax')) {
//Do whatever
}
}
但你真的需要这个吗?那里有什么阻碍你的?也许你错误地使用这个回调方法?
另外请记住,如果通过beforeFilter()
在孩子中明确调用hte父控制器的parent::beforeFilter()
也会被调用,如果有什么请求也会在那里通过。
答案 2 :(得分:0)
只需检查当前请求是否是通过beforeFilter中的AJAX进行的;
public function beforeFilter()
{
if ($this->request->is('ajax')) {
return;
}
// rest of your code
}
这将不禁用附加到控制器的组件的beforeFilter()