CakePHP Shell,如何使用控制器动作

sla*_*cky 1 cakephp cakephp-2.1

使用蛋糕2.1.1.我正在尝试从控制器执行一个cron作业来执行一个动作.这是正确的方法吗?我的OffersController有一个名为admin_test的动作.我希望每2小时运行一次这个动作.目前我在app/Console/command/SyncapiShell.php中创建了一个shell:

class SyncapiShell extends AppShell {
    public $uses = array('Offer');

    public function main() {
       $this->Offer->admin_test();
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到一个SQLSTATE [42000]语法错误或访问冲突尝试执行shell.我也在使用管理路由,auth组件和ACL.shell如何工作?它忽略了身份验证和acl权限?通常,admin_test操作只能由特定的经过身份验证的用户访问.

谢谢

bur*_*zum 5

不,这不是正确的做法,但更可能是您的应用程序架构不好的强有力指标.你应该有胖型和微型控制器.

Shell:uses将像控制器的使用属性和加载模型一样工作.在控制器中,您应该使用模型关联,而不是使用用户加载数千个模型.

重构您的控制器方法并将代码移动到Offer模型中.

千层蛋糕

为什么shell需要身份验证或管理路由?正如名称所说,shell是一个shell程序,而不是一个网站.身份验证基本上由运行脚本的操作系统和用户完成.只有有权访问shell的人才能够运行它.