如何测试是否从CakePHP控制台运行?

时间:2011-04-10 16:26:12

标签: php cakephp

我有一个CakePHP控制台Shell可以正常工作,直到Model->afterFind()尝试向结果添加一些数据,包括添加链接,这些链接在从控制台调用时似乎不起作用。

有没有办法在Model->afterFind()回调函数中测试是否从控制台Shell调用它,以便我可以跳过我不需要的麻烦部分?

谢谢, 伊恩

2 个答案:

答案 0 :(得分:5)

我不太确定是否有Cake方法可以做到,但你可以通过常规PHP来实现

 if(php_sapi_name() == 'cli' && empty(getClientIP())) {
      //running via CLI
 } else {
      //running normally
 } 

答案 1 :(得分:1)

在我看来,如果您的业务(模型)层在不同的上下文中运行时会产生负面影响,那么您将破坏MVC最佳实践。无论你将什么放入Model-> afterFind()应该完全不知道应用程序的执行方式。

理解了这一点后,CakePHP的模型层完全不了解执行上下文。一种解决方案是通过将标志从shell传递给模型层来解决这个问题。即:

位于app_model.php的顶部:

var $isShellContext = false;

然后,在你的shell中:

$this->Model->isShellContext = true;

然后在Model-> afterFind():

if(!$this->isShellContext) {
   // add links, etc
}