1

我想要一个我必须能够访问 appController 的 shell 脚本,这可能吗,而无需将该代码复制到 AppShell 中?如果是这样,任何指针?

提前致谢

4

1 回答 1

4

通常,shell 不应依赖控制器内的代码、一些指针(根据要求):

  • 如果 Shell 必须执行与数据相关的任务,请将代码移至 Model。在任何情况下,这都是一种很好的做法(在 Google 上查找“Skinny Controllers, Fat Models”)
  • 尽管不支持“标准”,但您可以将代码移动到“组件”(请参阅​​组件)。组件用于控制器中使用的代码的可重用部分。

如果上述选项确实不是一个选项,您将不得不手动初始化 AppController。请记住,因为您是从命令行运行的,所以不会出现各种情况,例如没有“请求”并且某些环境变量(例如主机名)可能不会返回预期值!

手动初始化控制器

手动初始化控制器将是这样的;

App::uses('CakeRequest', 'Network');
App::uses('CakeResponse', 'Network');
App::uses('Controller', 'Controller');
App::uses('AppController', 'Controller');

// request/response may be optional, depends on your use
$controller = new AppController(new CakeRequest(), new CakeResponse());
$controller->constructClasses();
$controller->startupProcess();
于 2013-04-14T16:54:06.853 回答