0

ext_autoload.php というファイルを、typo3 4.7 拡張機能のルート ディレクトリに置くことができることを知っています。これにより、ext_autoload.php ファイルに記述されているすべてのクラスがロードされます。

しかし、バックエンド モジュールのサブディレクトリmyext/mod1に ext_autoload.php ファイルを配置すると、 このファイル ext_autoload.php が無視されるようです。

左フレームでクリックしてバックエンド モジュールを呼び出すmyext/mod1/index.phpと、 が呼び出されますが、上位レベルの myext/ext_autoload.php に記載されているクラスも見つかりません。

したがって、拡張機能のルート ディレクトリにある php ファイルのみが、自動読み込みメカニズムの恩恵を受けるようです。 これは正しい動作ですか?

エラーログにこれらのエントリがあります。(もちろん、クラス名のスペルミスがないと仮定して...)

PHP Fatal error:  Class 'tx_myext_module1' not found in /var/www/typo3-4.7.8/typo3_src-4.7.8/t3lib/class.t3lib_div.php on line 4855, referer: http://.../cms/typo3/backend.php

拡張機能のサブディレクトリを再帰的にスキャンし、多くの場所で自動読み込みファイルを探すのは効率的ではないと思いますが、それでも自動読み込みメカニズムに関する詳細情報は見つかりませんでした。

ファイルは次のようになります。

return array(
    'tx_icdpdb_module1' => t3lib_extMgm::extPath('icdp_db', 'mod1/class.tx_icdpdb_module1.php')
);

?>

しかし、ext/myextkey/index.php にはメリットがありますが、ext/myextkey/mod1/index.php にはメリットがありません。

include()必要なクラスを含むファイルを古き良きものにすることで問題を解決しました。

4

1 に答える 1

1

ドキュメントに記載されているように、ファイルへの「フル」パスを指定すると、これが機能します。

<?php
$extensionPath = t3lib_extMgm::extPath('scheduler');
return array(
    'tx_scheduler_croncmd' => $extensionPath . 'class.tx_scheduler_croncmd.php',
    'tx_scheduler_croncmd_normalize' => $extensionPath . 'Normalize/class.tx_scheduler_croncmd_normalize.php',
);
?>

t3lib_extMgm::extPath()またはを使用するとt3lib_extMgm::extRelPath()、すべてがうまくいくはずです。

于 2013-07-29T15:44:53.217 に答える