Zend Framework 1.12 控制台命令
Zend Framework 1.12 Console commands
我正在使用 Zend Framework 1.12。我知道它太旧了,这就是为什么没有找到太多支持所以把这个问题放在这里的原因。
我有 CronController,我通过 curl 请求调用它,这不是一个好方法。顾名思义,我想通过命令行调用它的功能。请建议我怎样才能做到这一点。
我已经尝试实施 https://docs.zendframework.com/zend-console/intro/ 但没有多大帮助。
提前致谢。
我假设 CronController
是 class 扩展 Zend_Controller_Action
像这样:
class CronController extends Zend_Controller_Action
{
public function processAction()
{
// some very important logic
}
}
如果是这样,请不要在您的 CLI 调用中使用它。 Zend_Controller_Action 应该用于 HTTP 请求,而不是 CLI 调用。
将您的业务逻辑从此控制器移至单独的 classes,即:
class My_Logic
{
public function process($options)
{
// some very important logic
}
}
然后,在 DRY principle 之后,在您的控制器中创建此 class 的实例:
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 值名称
我正在使用 Zend Framework 1.12。我知道它太旧了,这就是为什么没有找到太多支持所以把这个问题放在这里的原因。
我有 CronController,我通过 curl 请求调用它,这不是一个好方法。顾名思义,我想通过命令行调用它的功能。请建议我怎样才能做到这一点。
我已经尝试实施 https://docs.zendframework.com/zend-console/intro/ 但没有多大帮助。
提前致谢。
我假设 CronController
是 class 扩展 Zend_Controller_Action
像这样:
class CronController extends Zend_Controller_Action
{
public function processAction()
{
// some very important logic
}
}
如果是这样,请不要在您的 CLI 调用中使用它。 Zend_Controller_Action 应该用于 HTTP 请求,而不是 CLI 调用。
将您的业务逻辑从此控制器移至单独的 classes,即:
class My_Logic
{
public function process($options)
{
// some very important logic
}
}
然后,在 DRY principle 之后,在您的控制器中创建此 class 的实例:
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