0

ZendFrameworkコマンドラインアプリケーションがあります。このアプリケーションで使用するすべてのモデルとものは、デフォルトのモジュール(アプリケーションプレフィックス)になりましたが、それらをcliモジュールに移動したいと思います。モデルをapplication/cli / modelフォルダーに移動し、クラス名の名前を変更すると、オートローダーはそれらを見つけることができません。管理モジュールもあり、正常に動作しています。

これが私のserver.phpファイルです:

defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(__DIR__ . '/../application'));
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));
require_once 'Zend/Application.php';
$application = new Zend_Application(
            APPLICATION_ENV,
            APPLICATION_PATH . '/configs/application.ini'
);
$application->getBootstrap()->bootstrap(array('date', 'config'));

これが私のapplication.iniです。

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.modules[] = ""

モジュールをコマンドラインモードで動作させるにはどうすればよいですか?

4

2 に答える 2

2

Cliモジュールのブートストラップファイルが欠落していると思います-にあるはずapplication/modules/cli/Bootstrap.phpです。また、モジュールとフロントコントローラーのリソースをアレイに追加して初期化する必要がある場合もあります。これにより、次のことが可能になります。

$application->getBootstrap()->bootstrap(array('date', 'config', 'modules', 'frontController'));

そうでない場合は、発生しているエラー、使用しようとしているクラス、およびそれが定義されている場所など、より多くの情報が必要になります。

于 2013-02-04T09:19:47.633 に答える
1

必要なのはCLIエントリポイントです。

通常、http経由でブラウザのindex.php(または/)にアプリを入力します。これにより、通常、応答とルーターが構築されます。Web経由でアクセスしていないため、これを少し調整する必要があります。

したがって、エントリポイントとして使用するファイルを作成します(例:cli.php)(public / index.phpからコピーします)。そしてそれにいくつかの微調整を行います

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);

// bootstrap and retrieve the frontController resource
$front = $application->getBootstrap()
                     ->bootstrap('frontController')
                     ->getResource('frontController');

//Which part of the app we want to use?
$module     = 'default'; //or other module
$controller = '<your controller>';
$action     = '<your action>';

//create the request
$request = new Zend_Controller_Request_Simple ($action, $controller, $module, $options);

// set front controller options to make everything operational from CLI
$front->setRequest($request)
      ->setResponse(new Zend_Controller_Response_Cli())
      ->setRouter(new Custom_Controller_Router_Cli())
      ->throwExceptions(true);

// lets bootstrap our application and enjoy!
$application->bootstrap()
            ->run();
于 2013-02-04T07:49:58.357 に答える