Консольные команды Zend Framework 1.12 - PullRequest
1 голос
/ 08 января 2020

Я использую Zend Framework 1.12. Я знаю, что он слишком стар, и поэтому не нашел большой поддержки, поэтому поставлю этот вопрос здесь.

У меня есть CronController, и я вызываю его через запрос curl, и это не очень хороший подход. Как следует из названия, я хочу вызывать его функции через командную строку. Пожалуйста, подскажите, как мне этого добиться.

Я пытался реализовать https://docs.zendframework.com/zend-console/intro/, но это не очень помогло.

Заранее спасибо.

1 Ответ

1 голос
/ 08 января 2020

Я предполагаю, что CronController - это расширение класса Zend_Controller_Action, например:

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

Если это так, не используйте это в своих вызовах CLI. Zend_Controller_Action следует использовать скорее с HTTP-запросами, а не с вызовами CLI.

Переместите бизнес-логи c из этого контроллера в отдельные классы, например:

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

Затем, следуя DRY принцип , создайте экземпляр этого класса в вашем контроллере:

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

Теперь создайте каталог bin в root пути вашего проекта и поместите туда свой скрипт 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 - это имя вашего значения APP_ENV из application / configs / application.ini

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...