2

Translate クラスを使用しようとすると、Zend フレームワークで奇妙な致命的なエラーが発生します。空のファイル名 (.php) をロードしようとすると、致命的なエラーが発生するようです。

以下はスタックトレースです

[error] [client 79.160.197.135] PHP Warning:  include_once() [<a href='function.include'>function.include</a>]: Failed opening '.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /usr/share/php/Zend/Loader.php on line 146, referer: index.php
[error] [client 79.160.197.135] PHP Stack trace:, referer: index.php
[error] [client 79.160.197.135] PHP   1. {main}() /doc/index.php:0, referer: index.php
[error] [client 79.160.197.135] PHP   2. Zend_Translate->__construct() /doc/index.php:19, referer: index.php
[error] [client 79.160.197.135] PHP   3. Zend_Translate->setAdapter() /usr/share/php/Zend/Translate.php:89, referer: index.php
[error] [client 79.160.197.135] PHP   4. Zend_Loader::loadClass() /usr/share/php/Zend/Translate.php:127, referer: index.php
[error] [client 79.160.197.135] PHP   5. Zend_Loader::loadFile() /usr/share/php/Zend/Loader.php:94, referer: index.php
[error] [client 79.160.197.135] PHP Fatal error:  Uncaught exception 'Zend_Exception' with message 'File ".php" does not exist or class "" was not found in the file' in /usr/share/php/Zend/Loader.php:99

参考までに、私が zend translate クラスを呼び出している方法は次のとおりです。

<?php

    require_once( 'Zend/Loader.php' );

    Zend_Loader::loadClass( 'Zend_Translate' );

    $translate = new Zend_Translate(
        array(
            'gettext',
            'locale',
            null,
            array('scan' => Zend_Translate::LOCALE_DIRECTORY)
        )
    );
?>

$translate セクションは、クラッシュの原因となっているクラスを呼び出しているセクションです。

4

2 に答える 2

2

Zend サイトのドキュメントは、Aptitude on debian に含まれる Zend フレームワークには新しすぎるか、古すぎることが判明しました。

Zend_Translate は、単一の配列で呼び出すのではなく、次のように個々の要素で呼び出す必要があります。

$translate = new Zend_Translate( 'gettext', 'path/to/locale.mo', 'locale' );
于 2012-08-06T12:31:55.850 に答える
0

使用している ZF のバージョンによっては、古い (非推奨の) オートローダーを使用しています。

あなたも試すことができます:

require_once( 'Zend/Loader/Autoloader.php' );

Zend_Loader_Autoloader::getInstance();

を呼び出してオートローダーを初めてロードするとgetInstance()、ZF はオートローダーを自動的に登録します。それはあなたの問題の考えを解決しませんが、単なる提案です。

新しいZend_Translateオブジェクトを作成する場合は、config に配列を渡すことができますが、オプションを指定するときにキー => 値のペアを使用する必要があります。

$translate = new Zend_Translate(
        array(
                'adapter' => 'gettext',
                'content' => 'path/to/locale.mo',
                'locale'  => 'en_US',
                'scan'    => Zend_Translate::LOCALE_DIRECTORY
        )
);
于 2012-08-06T15:55:37.573 に答える