我正在尝试使用Zend Framework为企业应用程序找到实现Model的最佳方法。从不同的文章我现在相信服务层是一个非常好的主意。我看到支持服务层的一个论点是 - 它可以从外部调用 - 比如来自crons,SOAP,命令行任务和队列。
但我不清楚它是如何做到的。当从外部调用服务时,Bootstrap将无法运行,因此模型将没有关于数据库,邮件传输,日志记录等的信息。
有什么建议吗?
答案 0 :(得分:4)
最简单的方法是创建一个用于执行cron任务的CLI脚本。
您可以使用Zend_Application和bootstrap类在CLI脚本中引导您的应用程序,就像它在Web末端引导一样。
只是不要运行应用程序,而只是引导它。这样,您就可以访问与Web应用程序相同的环境。
答案 1 :(得分:2)
我们使用的是一个简单的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
中)