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

时间:2012-04-17 08:23:52

标签: 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();
    }
}

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

谢谢

1 个答案:

答案 0 :(得分:5)

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

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

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

LayerCake

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