requestAction在CakePHP 2 Shell命令中不起作用



我正在尝试制作一个cronshell,为此使用requestAction的能力至关重要。

出于测试目的,我将我的Shell简化为:

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.";
}
}

我仍然无法让它运行。它只是表面上成功地返回,但实际上并不是。(没有错误(Filter之前提出的另一个SO问题(以及其他生命周期方法(可能是原因,但我已经确保情况并非如此请参阅更新

  1. 其他控制器/操作不起作用
  2. 删除操作的return没有帮助
  3. 使用基于字符串的调用没有帮助
  4. CakePHP v2.10.22

更新:看起来Auth组件可能导致重定向到AppController中的users/login。然而,我看不到我告诉它重定向到这里的任何地方,而且我甚至没有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的Auth,都会不断地重定向我。所以我把上面的内容减少为Session,并在下写下

if (php_sapi_name() !== 'cli')

此:

$this->components = [
'Session',
'Auth' => [
'loginRedirect' => ['controller' => 'worlds', 'action' => 'route']
]
];

这就把Auth从等式中删除了。我本以为CakePHP2的控制台会给我任何重定向的指示,但我敢打赌未来的版本会处理得更好。

最新更新