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(及其他生命周期方法),但我已确保情况并非如此查看更新。

  1. 其他控制器/操作不起作用。
  2. 删除操作的return并没有帮助。
  3. 使用基于字符串的调用无济于事。
  4. 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的控制台能够给我任何迹象表明它已被重定向,但是我敢打赌将来的版本会更好地处理它。