Zend Framework 1.12控制台命令

问题描述 投票:0回答:1

我正在使用Zend Framework 1.12。我知道它已经太旧了,这就是为什么没有找到太多支持的原因,所以把这个问题放在这里。

我有CronController,我通过curl请求调用它,这不是一个好方法。顾名思义,我想通过命令行调用其函数。请建议我该如何实现。

我曾尝试实现https://docs.zendframework.com/zend-console/intro/,但并没有太大帮助。

提前感谢。

zend-framework
1个回答
0
投票

我假设CronController是此类的扩展Zend_Controller_Action的类:

class CronController extends Zend_Controller_Action
{
    public function processAction()
    {
        // some very important logic
    }
}

如果是这样,请不要在CLI调用中使用它。 Zend_Controller_Action应该用于HTTP请求,而不是CLI调用。

将您的业务逻辑从此控制器移动到单独的类,即:

class My_Logic
{
    public function process($options)
    {
        // some very important logic
    }
}

然后,在DRY principle之后,在您的控制器中创建此类的实例:

class CronController extends Zend_Controller_Action
{
    public function processAction()
    {
        $logic = new My_Logic();
        $logic->process();
    }
}

现在,在项目的根路径中创建bin目录,并在其中放置CLI脚本(即cron.php):

defined('APPLICATION_PATH')
        || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
        realpath(APPLICATION_PATH . '/../library'),
        get_include_path(),
)));

require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();

$optsConfig = array(
    'app_env=s' => 'Application environment name',
);

$opts = new Zend_Console_Getopt($optsConfig);
$opts->setOptions(
    array(
        'ignoreCase' => true,
        'dashDash'   => false,
    )
);
$opts->parse();

defined('APPLICATION_ENV')  || define('APPLICATION_ENV', $opts->app_env);

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);

$application->getBootstrap()->bootstrap();

class CronCli
{
    public function doProcessing()
    {
        $logic = new My_Logic();

        // here's your logic, the same as in controller
        $logic->process();
    }
}

$cmd = new CronCli($opts);
$cmd->doProcessing();

现在,您可以在项目的主目录中调用此脚本:

php bin/cron.php --app_env production

production是来自application / configs / application.ini的APP_ENV值名称

© www.soinside.com 2019 - 2024. All rights reserved.