我试图找到使用 Zend Framework 为企业应用程序实现模型的最佳方法。从不同的文章中,我现在确信服务层是一个非常好的主意。我看到支持服务层的一个论点是——它可以从外部调用——比如从 crons、SOAP、命令行任务和队列。
但我不清楚它是如何做到的。当从外部调用服务时,Bootstrap 将不会运行,因此模型将没有关于数据库、邮件传输、日志记录等的信息。
有什么建议么?
我试图找到使用 Zend Framework 为企业应用程序实现模型的最佳方法。从不同的文章中,我现在确信服务层是一个非常好的主意。我看到支持服务层的一个论点是——它可以从外部调用——比如从 crons、SOAP、命令行任务和队列。
但我不清楚它是如何做到的。当从外部调用服务时,Bootstrap 将不会运行,因此模型将没有关于数据库、邮件传输、日志记录等的信息。
有什么建议么?
最简单的方法是创建一个用于执行 cron 任务的 CLI 脚本。
您可以使用 Zend_Application 和 bootstrap 类在 CLI 脚本中引导应用程序,就像在 Web 端引导应用程序一样。
只是不要运行应用程序,而只是引导它。这样,您将可以访问与您的 Web 应用程序相同的环境。
我们正在使用一个简单的init.inc.php
脚本,该脚本包含在我们的命令行脚本和 cronjob 脚本中,它引导我们需要的资源:
<?php
// Define path to application directory
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(),
)));
// we can't afford not have a APPLICATION_ENV, so return a fatal error in this case
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV',
(getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
: ''));
chdir(APPLICATION_PATH);
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$resources = array('autoload', 'config', 'multidb', 'logger', 'cache', 'settings');
foreach ($resources as $resource) {
$application->bootstrap($resource);
}
set_time_limit(1200);
ini_set('memory_limit', '700M');
$resources
数组是您希望加载的引导函数APPLICATION_ENV
通常是由 设置的变量,.htaccess
因此您必须将其设置为 shell 变量(或仅将其包含在 中init.inc.php
)