我有一个CakePHP控制台Shell可以正常工作,直到Model->afterFind()
尝试向结果添加一些数据,包括添加链接,这些链接在从控制台调用时似乎不起作用。
有没有办法在Model->afterFind()
回调函数中测试是否从控制台Shell调用它,以便我可以跳过我不需要的麻烦部分?
谢谢, 伊恩
答案 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
}