如何解决CakePHP 2 Shell命令中的requestAction不起作用
我正在尝试制作cron外壳,为此使用requestAction的能力至关重要。
出于测试目的,我将Shell简化为:
class CronShell extends AppShell {
public $uses = array('Cron');
public function main() {
$this->requestAction(['controller' => 'events','action' => 'play',38,true,true]);
echo "This will never be printed to the console,it dies before this.";
}
}
我仍然无法运行它。它只是简单地返回看似成功的结果,但实际上并非如此。 (无错误)Another SO question建议使用beforeFilter(及其他生命周期方法),但我已确保情况并非如此。 查看更新。
- 其他控制器/操作不起作用。
- 删除操作的
return
并没有帮助。 - 使用基于字符串的调用无济于事。
- CakePHP v2.10.22
更新:似乎Auth组件可能导致重定向到users/login
中的AppController
。但是我看不到任何地方告诉我重定向到这里,并且我什至没有 users/login
动作。当我从'Auth'
中删除public $components = []
时,外壳程序将在CLI上运行。
但是我无法禁用Auth!我尝试了allow(*),将重定向设置为false,甚至尝试了$this->components = ['']
。我总是被重定向到用户/登录。
解决方法
好吧,事实证明它不是 beforeFilter 或生命周期的任何部分,但是我确实在AppController上有了Auth
组件,如下所示:
public $components = [
'Session','Auth' => [
'loginRedirect' => ['controller' => 'worlds','action' => 'route']
]
];
无论我做什么,以允许或模拟cli的Auth,都不断地重定向我。所以我将以上内容简化为Session并写在下面,
if (php_sapi_name() !== 'cli')
此:
$this->components = [
'Session','action' => 'route']
]
];
这将Auth从等式中删除。我本来希望CakePHP 2的控制台能够给我任何迹象表明它已被重定向,但是我敢打赌将来的版本会更好地处理它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。