有没有办法制作一个脚本,我可以做$this->EE->db
之类的东西(即使用Expression Engine的类,例如访问数据库),但是可以在命令行中运行?
我尝试搜索它,但文档似乎不包含此信息(请correct me if I'm wrong)。我正在使用EE 2.4(上面的链接应该指向2.4文档)。
答案 0 :(得分:4)
以下文章似乎有一种可能的方法:Bootstrapping EE for CLI Access
- 复制index.php文件并将其命名为cli.php。
- 将index.php文件移到DOCUMENT_ROOT之外。现在,从技术上讲,这不是必需的,但没有理由进行撬动 眼睛看你努力工作,为什么不保护它。
- 在cli.php内部更新第26行的$ system_path以指向您的系统文件夹。
- 在cli.php内部更新第96行的$ routing ['controller']为cli。
- 在cli.php内部更新第96行的APPPATH为$ system_path.'cli /'.
- 复制system / expressionengine目录并将其命名为system / cli。
- 复制cli / controllers / ee.php文件并将其命名为cli / controllers / cli.php。
- 最后,将cli / controllers / cli.php中的类名更新为Cli并删除方法。
- 默认情况下,EE调用索引方法,因此请添加索引方法以执行所需操作。
答案 1 :(得分:2)
@Zenbuman这是一个有用的起点,虽然我会补充说我的所有请求都有问题转到cli - >索引,而我想要一些转到cli-> task1,cli-> task2等
我必须更新* system \ codeigniter \ system \ core \ URI.php *以便它知道如何通过命令行提取我传递的参数,我从下面得到了以下代码Codeigniter的更新版本,支持CLI
// Is the request coming from the command line?
if (php_sapi_name() == 'cli' or defined('STDIN'))
{
$this->_set_uri_string($this->_parse_cli_args());
return;
}
// Let's try the REQUEST_URI first, this will work in most situations
并在同一个文件中创建了该函数
private function _parse_cli_args()
{
$args = array_slice($_SERVER['argv'], 1);
return $args ? '/' . implode('/', $args) : '';
}
还必须在我的cli.php文件中注释掉以下内容,因为所有路由都转到我的cli控制器中的索引方法而忽略了我的参数
/*
* ~ line 109 - 111 /cli.php
* ---------------------------------------------------------------
* Disable all routing, send everything to the frontend
* ---------------------------------------------------------------
*/
$routing['directory'] = '';
$routing['controller'] = 'cli';
//$routing['function'] = '';
即使离开
$routing['function'] = '';
将强制请求转到索引控制器
最后我觉得这有点hacky但我真的需要在我的情况下使用EE API库。否则我会用Codeigniter创建一个单独的应用程序来处理我的CLI需求,希望以上帮助其他人。
答案 2 :(得分:1)
在解决了我自己的问题后,我找到了@ Zenbuman的答案。我的示例允许您将cron脚本保留在模块中,因此如果您需要模块具有cron功能,则所有模块都将整齐地打包在一起。 Here's a detailed guide on my blog