从crons,SOAP,命令行任务和队列调用Zend Framework服务层

时间:2012-06-18 13:02:38

标签: zend-framework

我正在尝试使用Zend Framework为企业应用程序找到实现Model的最佳方法。从不同的文章我现在相信服务层是一个非常好的主意。我看到支持服务层的一个论点是 - 它可以从外部调用 - 比如来自crons,SOAP,命令行任务和队列。

但我不清楚它是如何做到的。当从外部调用服务时,Bootstrap将无法运行,因此模型将没有关于数据库,邮件传输,日志记录等的信息。

有什么建议吗?

2 个答案:

答案 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中)