web-dev-qa-db-fra.com

Comment ajouter un package composer sans modifier le fichier core composer.json

J'essaie d'ajouter un package Composer et de le rendre disponible globalement, mais je ne souhaite pas modifier core compos.json pour des raisons évidentes.

Est-ce que la seule façon de faire cela est d'avoir un composer.json soit sur la racine Joomla (ou en dehors de la racine joomla) et d'inclure l'autoloader soit dans le fichier index.php ou le fichier define.php? Ou la meilleure pratique actuelle consistant à inclure les packages dans chacune des extensions selon les besoins?

Le package que j'essaie d'inclure est https://github.com/nette/forms et de le rendre disponible globalement afin que je puisse l'utiliser pour les formulaires front-end.

4
sifu

Je pense que Joomla 4 sera modifié en modifiant le fichier root de Joomla. Dans l'intervalle, je pense que la meilleure façon d'utiliser composer) est d'inclure un composer.phar dans un plugin système personnalisé. Ensuite, appelez l'autoloader à l'événement onAfterRoute, puis, s'il est disponible globalement ou si vous souhaitez charger l'autoloader pour 1 composant, par exemple, vous pouvez extraire la valeur de l'option de jinput et envelopper simplement l'instruction require dans un if. le dossier de la bibliothèque Joomla avant d'inclure des paquets supplémentaires et d'installer aucun paquet déjà fourni avec Joomla, car l'autochargeur de Joomla et votre autochargeur ne peuvent pas coordonner différentes versions de paquets et vous risquez de tout casser !!! Cela étant dit, cela n'arrivera probablement jamais ou causer des problèmes.

<?php 
defined('_JEXEC') or die('Restricted access');

class plgSystemYayComposer extends JPlugin
{
    function onAfterRoute()
    {
        require_once(JPATH_ROOT . '/plugins/system/yaycomposer/composer/vendor/autoload.php');
    }
}

Évidemment, cette technique ne s’applique pas au développement pour la distribution de composants, etc. Vous devriez probablement également supprimer le fichier phar plutôt que de le laisser in situ, et/ou bloquer tout accès Web au répertoire avec un fichier htaccess mais, vous savez, je ne suis pas ton père.

4
jamesgarrett