2016-06-21 51 views
1

我正在嘗試將一組庫用於Composer作爲Prestashop模塊。要求在Prestashop模塊上的一個文件中自動加載的方法?

我目前的做法是包括vendor/autoload.php文件上的每個文件(mymodule.phpcontrollers/front/foo.phpcontrollers/admin/bar.php等)

做的只需要在mymodule.php的頂部是不是一個解決方案,我沒有看到任何掛鉤來完成任務。

是否有更好的方法比複製&粘貼在每個PHP文件的頂部相同的片段?謝謝!

+0

等待隨後的Prestashop的新版本。 –

+2

我不確定你正在使用哪個版本的PrestaShop,但是在調度器中有一個** actionDispatcher **鉤子,也許你可以用它來做你的自定義加載,然後執行控制器。 https://github.com/PrestaShop/PrestaShop/blob/develop/classes/Dispatcher.php#L353 –

+0

Wooow,這是一個很好的...我應該開始調查它 –

回答

1

我已經找到了辦法!

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! 
    } 
0

也許可以使用htaccess/rewrite將所有腳本重新路由到一個腳本,然後在包含prestashop文件之前使用自動載入。

+0

不是一個壞主意,但據我所知,Prestashop只需要一個控制器,例如。不涉及htaccess –

+0

它基於symfony,也許你可以在symfony基類上使用autoload?問題在於,如果不更改代碼,您將無法更新它。 –