1

エンタープライズ アプリケーションに Zend Framework を使用してモデルを実装する最良の方法を見つけようとしています。さまざまな記事から、サービス層は非常に優れたアイデアであると確信しています。サービス層を支持する議論の 1 つは、cron、SOAP、コマンド ライン タスク、およびキューからのように、外部から呼び出すことができるということです。

しかし、それがどのようにできるかは明確ではありません。サービスが外部から呼び出されると、ブートストラップは実行されないため、モデルには DB、メール トランスポート、ロギングなどに関する情報がありません。

助言がありますか?

4

2 に答える 2

4

最も簡単な方法は、cronタスクを実行するために使用されるCLIスクリプトを作成することです。

Zend_Applicationとブートストラップクラスを使用して、Webエンドでブートストラップされるのと同じように、CLIスクリプトでアプリケーションをブートストラップできます。

アプリケーションを実行せず、代わりにブートストラップするだけです。このようにして、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であるため、シェル変数に設定する必要があります (または単に に含める必要がありますinit.inc.php) 。
于 2012-06-18T15:23:25.667 に答える