requestAction在CakePHP 2 Shell命令中不起作用
我正在尝试制作一个cron shell,使用requestAction来实现这一点至关重要 出于测试目的,我将Shell简化为:requestAction在CakePHP 2 Shell命令中不起作用,cakephp,cakephp-2.0,Cakephp,Cakephp 2.0,我正在尝试制作一个cron shell,使用requestAction来实现这一点至关重要 出于测试目的,我将Shell简化为: class CronShell extends AppShell { public $uses = array('Cron'); public function main() { $this->requestAction(['controller' => 'events', 'action' => 'play
class CronShell extends AppShell {
public $uses = array('Cron');
public function main() {
$this->requestAction(['controller' => 'events', 'action' => 'play', 38, 0, true, true]);
echo "This will never be printed to the console, it dies before this.";
}
}
我仍然无法让它运行。它只是表面上成功地返回,但实际上并非如此。(无错误)beforeFilter(和其他生命周期方法)可能是原因,但我已经确定情况并非如此请参阅更新。
返回
没有帮助AppController
中的users/login
。但是我没有看到我告诉它在这里重定向的地方,我甚至没有用户/登录
操作。当我从我的public$components=[]
中删除'Auth'
时,shell将在CLI上运行
但我禁用Auth有困难!我尝试了allow(*),将重定向设置为false,甚至尝试了
$this->components=['']
。我总是被重定向到用户/登录。事实证明,这不是beforeFilter或生命周期的任何部分,但我的AppController上确实有Auth
组件,如下所示:
public $components = [
'Session',
'Auth' => [
'loginRedirect' => ['controller' => 'worlds', 'action' => 'route']
]
];
无论我如何允许或模拟cli的身份验证,它都会不断地重定向我。所以我把上面的内容缩减为会话,并在下面写下
if(php\u sapi\u name()!='cli')
这:
这就把Auth从方程中去掉了。我本以为CakePHP 2的控制台会告诉我它被重定向的任何迹象,但我敢打赌未来的版本会处理得更好。未来的版本丢弃了
requestAction()
,这确实更好,因为它所做的一切都是鼓励糟糕的应用程序架构;)如果您需要在控制器和shell之间共享功能,那么这表明您的代码应该放在服务中。不用担心@ndm,您会为我的重构事件控制器感到自豪。胖模特之类的。这里的问题(以及我为什么在蛋糕2上)是整个系统从2013年初开始,在这一点上,已经完成的事情已经完成了,我必须专注于制作新的;这个软件从来没有打算按照我的要求去做,但它真的像个冠军一样。
$this->components = [
'Session',
'Auth' => [
'loginRedirect' => ['controller' => 'worlds', 'action' => 'route']
]
];