可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm trying to use a set of libraries with Composer for a Prestashop module.
My current approach is to include the vendor/autoload.php
file on every file (mymodule.php
, controllers/front/foo.php
, controllers/admin/bar.php
, etc.)
Doing the require only on top of the mymodule.php
is not a solution, I don't see any hook to do the task.
Is there a better approach than copy & paste the same snippet on top of every PHP file? Thank you!
回答1:
I've found the way to do it!
The actionDispatcher hook was working for me with models, hooks, but not with controllers.
Seems like there is a not documented hook called moduleRoutes which loads before any controller.
So I've been able to autoload in all my module's classes this way:
<?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! }
回答2:
Maybe to re-route all scripts to one using htaccess/rewrite, then in that one before including prestashop files use autoload.