1

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

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

有什么建议么?

4

2 回答 2

4

最简单的方法是创建一个用于执行 cron 任务的 CLI 脚本。

您可以使用 Zend_Application 和 bootstrap 类在 CLI 脚本中引导应用程序,就像在 Web 端引导应用程序一样。

只是不要运行应用程序,而只是引导它。这样,您将可以访问与您的 Web 应用程序相同的环境。

于 2012-06-18T13:23:08.353 回答
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
于 2012-06-18T15:23:25.667 回答