cakephp 2.5.1:捕获拼写错误的函数调用

时间:2014-06-26 07:31:54

标签: cakephp cakephp-2.5

我有一个API wirtten,并给出了如何使用它的说明。 例如,要测试登录信息,您可以拨打/api/login

现在我在日志中看到有人一直在调用/API/LOGIN并收到错误500.

有什么方法可以在调用/api/控制器函数时捕获这些错误吗? 在这种情况下,我想发回一个像Error. Wrong function call这样的回复。 当错误500发生时,我不想发送它。实际上只有在/api/相关时。

报告的错误属于我在AppController::beforeFilter()中调用类似

的函数的事实
$this->Api->check($username)

我在debug = 2

时遇到此错误
Call to a member function check() on a non-object 

当我致电/api/login/时,功能完美无缺。

我期待任何提示!谢谢!

1 个答案:

答案 0 :(得分:1)

您遇到的问题不在于操作的大小(在PHP方法名称中不区分大小写),而是控制器的大小写。它找不到APIController,因此抛出一个丢失的控制器异常。然后,当AppControllerCakeErrorController扩展时,会调用$this->Api

我只能假设CakeErrorController引用模型,并且由于实际控制器是Dispatcher.beforeDispatch,因此该模型当然不会被加载,因此非对象错误。< / p>

有多种方法可以解决这个问题,我个人可能会挂钩// app/Config/bootstrap.php App::uses('CakeEvent', 'Event'); App::uses('CakeEventManager', 'Event'); CakeEventManager::instance()->attach( function(CakeEvent $event) { $controller = $event->data['request']->params['controller']; $action = $event->data['request']->params['action']; if(strtolower($controller) === 'api') { $response = $event->data['response']; if($controller !== 'api') { $response->statusCode('403'); $response->body('Invalid controller message'); return $response; } if(strtolower($action) !== $action) { $response->statusCode('403'); $response->body('Invalid action method'); return $response; } } }, 'Dispatcher.beforeDispatch', array('priority' => 11) ); 事件并抛出异常或在必要时定义适当的响应,如下所示:

api

如果{{1}}控制器被定位,这将强制使用控制器和操作的小写。

然而,如前所述,方法名称不区分大小写,因此从技术角度来看,强制执行小写操作并不是必需的。无论如何,它只是一个例子...