Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
requestAction在CakePHP 2 Shell命令中不起作用_Cakephp_Cakephp 2.0 - Fatal编程技术网

requestAction在CakePHP 2 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

我正在尝试制作一个cron shell,使用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.";
    }
}
我仍然无法让它运行。它只是表面上成功地返回,但实际上并非如此。(无错误)beforeFilter(和其他生命周期方法)可能是原因,但我已经确定情况并非如此请参阅更新。

  • 其他控制器/操作不工作
  • 删除操作的
    返回
    没有帮助
  • 使用基于字符串的调用没有帮助
  • CakePHP v2.10.22
  • 更新:看来Auth组件可能导致重定向到
    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']
        ]
    ];