问题
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.
来源:https://stackoverflow.com/questions/37939448/way-to-require-an-autoload-in-one-file-on-a-prestashop-module