3

私が達成しようとしているディレクトリ構造は次のようになります。

application/default/views/layouts/layout.phtml
application/default/views/scripts/index/index.phtml
application/admin/views/layouts/layout.phtml
application/admin/views/scripts/index/index.phtml
library/Zend
config/config.ini
public/index.php (bootstrap)

しかし、Zend に私の各モジュールで私の layout.phtml を見つけさせる方法がわかりません。

私のブートストラップには次のものがあります。

define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application/'));
define('APPLICATION_ENVIRONMENT', 'testing');

//setup path to our library files
set_include_path( APPLICATION_PATH . '/../library' . PATH_SEPARATOR .
                  get_include_path() );

//register the autoloader
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload(); 

//set config in the registry
$config = new Zend_Config_Ini( APPLICATION_PATH . '/../config/config.ini', APPLICATION_ENVIRONMENT ); 
Zend_Registry::set('config', $config);

//setup logging
$writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../log/debug.log');
$logger = new Zend_Log($writer);
Zend_Registry::set('logger', $logger);

//run!
$frontController = Zend_Controller_Front::getInstance();
$frontController->addModuleDirectory(APPLICATION_PATH);
//initialize Zend_Layout's MVC helpers
Zend_Layout::startMvc();

$frontController->throwExceptions(true);

try {
    
    Zend_Controller_Front::getInstance()->dispatch();

} catch (Exception $exception) {
    
    echo '<html><body><center>'  . 'An exception occured while dispatching the front controller.'; 
    if (defined('APPLICATION_ENVIRONMENT') && APPLICATION_ENVIRONMENT != 'production'  ) {
        echo '<br /><br />' . $exception->getMessage() . '<br />'  . '<div align="left">Stack Trace:' . '<pre>' . $exception->getTraceAsString() . '</pre></div>'; 
    }
    echo '</center></body></html>';
    exit(1);
}

どこが間違っていますか?

アップデート:

私はこれを長い間見ていないので、受け入れられた解決策は最新のものではないかもしれません. この質問に対する最新の解決策 (つまり、ZF 1.8+) を投稿したい人がいる場合は、そうしてください。これに対する解決策を探している他の人に役立つでしょう。

4

2 に答える 2

4

Per Module Zend_Layoutをチェックしてください。この記事では、作成者があなたが達成しようとしていることを正確にカバーしています。彼の方法論は、レイアウトの登録を処理するフロント コントローラー用のプラグインを作成することです。

于 2009-01-24T16:27:10.700 に答える
2

Zend Framework 1.12 の使用 (以前のバージョンではテストしていません): すぐに使用できます。

私は通常、application.ini を使用してセットアップを行い、レイアウトを有効にします。

resources.layout.layout = "layout"

...またはデフォルトのレイアウトを呼び出す必要があります。「layoutPath」が定義されていないため、Zend_Layout は「Application/modules//views/scripts」で「layout.phtml」というファイルを探します。

zend ツールを使用すると、次の行でレイアウトが開始されます。

resources.layout.layoutPath = APPLICATION_PATH "layouts/scripts"

これも問題ありません。ディレクトリを削除するか、デフォルトの「layout.phtml」を作成しないようにしてください。デフォルトのレイアウトがそのディレクトリに見つからない場合、以前と同様に、「Application/modules//views/scripts」内の「layout.phtml」をモジュールで検索します。

モジュール内にレイアウトが見つからない場合は、デフォルト モジュールのレイアウトが読み込まれます。

それと同じくらい簡単です!

テンプレートに追加の作業が必要な場合は、たとえば次のようにプラグインを追加できます。

resources.layout.pluginClass = "YourLibrary_Controller_Plugin_Layout"

その中でいくつかの余分なことをします。

于 2012-11-26T03:16:09.733 に答える