Php 如何在一个Prestashop模块上的一个文件中自动加载?
我正在尝试使用一组带有Composer的库来实现Prestashop模块 我目前的方法是在每个文件中包含Php 如何在一个Prestashop模块上的一个文件中自动加载?,php,composer-php,prestashop,autoload,Php,Composer Php,Prestashop,Autoload,我正在尝试使用一组带有Composer的库来实现Prestashop模块 我目前的方法是在每个文件中包含vendor/autoload.php文件(mymodule.php,controllers/front/foo.php,controllers/admin/bar.php,等等) 仅在mymodule.php上执行require不是一个解决方案,我看不到任何钩子来执行该任务 有没有比在每个PHP文件上复制粘贴相同的代码片段更好的方法?谢谢大家! 也许可以使用htaccess/rewrite将
vendor/autoload.php
文件(mymodule.php
,controllers/front/foo.php
,controllers/admin/bar.php
,等等)
仅在mymodule.php
上执行require不是一个解决方案,我看不到任何钩子来执行该任务
有没有比在每个PHP文件上复制粘贴相同的代码片段更好的方法?谢谢大家! 也许可以使用htaccess/rewrite将所有脚本重新路由到一个脚本,然后在包含pretashop文件之前,使用autoload将该脚本重新路由到另一个脚本。我找到了这样做的方法 actionDispatcher钩子为我提供了模型、钩子,但没有控制器 似乎有一个名为moduleRoutes的未记录钩子,它在任何控制器之前加载 因此,我能够以这种方式自动加载所有模块的类:
<?php
if (!defined('_PS_VERSION_'))
exit;
//_PS_MODULE_DIR_
require_once __DIR__.'/vendor/autoload.php'; // Autoload here for the module definition
class MyCustomModule extends Devnix\Prestablocks\Module { // My custom Prestashop framework (in experimental phase, https://github.com/devnix/prestablocks)
// ...
public function install() {
return
parent::install() &&
$this->registerHook('moduleRoutes'); // Register the hook
}
public function hookModuleRoutes() {
require_once __DIR__.'/vendor/autoload.php'; // And the autoload here to make our Composer classes available everywhere!
}
这主意不错,但据我所知,例如,Prestashop只需要一个控制器。没有基于symfony的htaccess involvedIt,也许您可以在symfony基类上使用自动加载?问题是,如果不更改代码,您将无法更新它。请等待较新版本的Prestashop。我不确定您使用的是哪个版本的Prestashop,但dispatcher中有一个actionDispatcher钩子,您可以使用它在控制器执行前进行自定义加载。现在的工作是在一个钩子中包含全局上下文中的自动加载…啊!快好了!!!。在$controller=controller::getController($controller\u class)之前,我需要一个钩子代码>我做到了!看到我接受的答案了吗