Zend_Console_Getopt和应用程序环境 - 如何使用param设置APP_ENV?

时间:2012-09-02 09:30:00

标签: php zend-framework

我现在遇到一个问题,即构建一个允许使用zend for app构建控制台脚本的机制。例如:

- 脚本

----的index.php

---- basecmd.php

当basecmd包含其他脚本的主类时,文件结构为

include index.php
....
MyClass extends Zend_Console_Getopt{

但是在index.php中我需要设置APPLICATION_ENVOIRMENT,并将param发送为--application_env到脚本 我的问题是我可以在使用getopt解析params时设置它,但是如何在index.php中创建它? 信息:我需要显示如下错误: 'application_env必须在运行脚本时始终设置' 我很感激任何指导。

1 个答案:

答案 0 :(得分:4)

如果我理解正确,你试图从CLI / CMD运行你的应用程序,通过调用basecmd.php来设置index.php的变量/常量才能正常工作

你的basecmd.php应该是这样的:

#!/usr/bin/env php
<?php
// basecmd.php
require_once 'path/to/Zend/Console/Getopt.php';
try {
    $opts = new Zend_Console_Getopt(
        array(
            'app-env|e=s' => 'Application environment',
            'app-path|ap=s' => 'Path to application folder',
            'lib-path|lp=s' => 'Path to library',
            // more options
        )
    );
    $opts->parse();
    if (!($path = $opts->getOption('ap'))) { // cli param is missing
        throw new Exception("You must specify application path");
    }
    define('APPLICATION_PATH', $path);
    // process other params and setup more constants/variables
} catch (Zend_Console_Getopt_Exception $e) {
    echo $e->getUsageMessage();
    exit;
} catch (Exception $e) {
    echo $e->getMessage() . "\n";
    exit;
}
// it is wise to setup another constant so application can determine is it a web or cli call
define('RUN_VIA', 'cli');
// if all done correctly include application loader script
include 'index.php';

在index.php中,你应该测试是否已经定义了常量或变量:

<?php
// index.php
defined('APPLICATION_PATH') // is it defined
    or define('APPLICATION_PATH', '../application'); // no? then define it
defined('RUN_VIA')
    or define('RUN_VIA', 'web');
// ... rest of the code

我希望这可以帮助你走上正轨;)