在进行ajax调用时,如何在cakephp中过滤之前跳过

时间:2013-05-11 11:02:47

标签: php cakephp

我正在尝试使用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函数?

感谢。

3 个答案:

答案 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()