问题描述
我正在尝试制作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(及其他生命周期方法),但我已确保情况并非如此。 查看更新。
更新:似乎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的控制台能够给我任何迹象表明它已被重定向,但是我敢打赌将来的版本会更好地处理它。