typo3:自动加载器只能在扩展的根目录中工作吗?

时间:2013-07-29 14:54:32

标签: typo3 autoload

我知道我可以将一个名为ext_autoload.php的文件放在我的typo3 4.7扩展的根目录中。这将加载ext_autoload.php文件中提到的所有类。

但是,当我将ext_autoload.php文件放在后端模块的子目录中时,请说myext/mod1 这个文件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()来解决了这个问题。

1 个答案:

答案 0 :(得分:1)

如果您提供the docs中所述文件的“完整”路径,则可以正常工作:

<?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()时,一切都会好起来。