2017-07-18 6 views
4

comment charger un module de site externe? J'ai un module commun que j'ai besoin de charger dans des sites Yii2 distincts, comme advanced-template mon idée est d'avoir un répertoire commun où stocker des modules génériques que je peux charger sur chaque site. Une structure de système de fichiers peut être comme ceci: / site-1/ (loads modules from common-modules dir for site-1) site-2/ (loads modules from common-modules dir for site-2) common_sites_modules/ module-1/ module-2/ carrello/ Carrello.phpYii2 modules de chargement

Chaque site dans sa configuration doit charger des modules de common-modules/ Est-il possible d'implémenter cette structure?

Edit 1

La configuration:

'cart' => [ 'class' => dirname(dirname(dirname(__DIR__))) . '/common_sites_modules/carrello/Carrello', 'params' =>[ ... ], 'components' => [ ... ], ],

et ceci est la première ligne de la classe Carrello.php:

<?php namespace common_sites_modules\carrello; ...

La barre de éditeur avec le chemin de la classe et l'erreur retournée par Yii: Sublime top bar

enter image description here

Edit 2:

Merci à @Yupik pour le soutien et suggère, les nouveaux paramètres:

bootstrap.php:

Yii::setAlias('@common-modules', dirname(dirname(dirname(__DIR__))) . '/common_sites_modules');

ma en local.php:

'class' => '@common-modules\carrello\Carrello',

L'erreur générée:

enter image description here

Comme suggéré dans les commentaires de la solution est de déclarer un alias, puis utiliser le nom d'alias pour l'appel du module. Comme suggéré par @Yupik je me suis fixé dans la commune/config/Bootstrap.php un alias comme suit:

Yii::setAlias('@common_modules', dirname(dirname(dirname(__DIR__))) . '/common_modules');

Dans la configuration principale:

'carrello' => [ 'class' => ''common_modules\carrello\Carrello', ... ]

Il est évident que l'espace de noms doivent être configuré en fonction de la position sur le système de fichiers. Merci pour les suggestions

+0

Oui, c'est possible. – Yupik

+0

Ok mais j'ai un problème pour charger le module, dans le paramètre 'class' de la configuration je définis le chemin absolu du module mais chaque fois que je reçois le' Class/var/www/html/common_sites_modules/mon-module/MyClass ne exist'exception quand un nouvel objet ReflectionClass a été généré avec le chemin, le chemin est correct alors pourquoi cette exception? – MarBer

+0

Probablement parce que vous faites quelque chose de mal. Partagez le code, sinon nous ne pouvons pas vous aider. – Yupik

Répondre

-1

Cela peut être fait en utilisant un modèle avancé et configurer un environnement d'application multiple (Documentation), puis sur un dossier commun mettez vos modules partagés et utilisez-les sur d'autres environnements.

+0

Le problème est d'utiliser dans des sites distincts (modèle de base ou avancé) le module, partager entre une partie du même site comme frontend et backend est facile, spécialement avec le modèle avancé. – MarBer

+0

Vous pouvez utiliser chaque application complètement séparée, par ex. utilisez site1 comme un dossier avec db distinct, site2 avec db distinct et ainsi de suite. Même vous pouvez installer une base avancée dans un endroit comme '/ var/yii' et rendre votre application quelque part comme'/var/http/site1', '/ var/http/site2' et ainsi de suite. Vous mettez votre module commun sur 'commons' et utilisez-les partout où vous voulez. Brisez le stéréotype sur le modèle avancé et utilisez-le en fonction de vos besoins. – meysam

+0

Le lien que vous attachez dans votre réponse explique comment, avec un modèle avancé, vous pouvez ajouter une partition logique de votre application, comme peut être frontend et backend, pour la même application. Je comprends que cela peut être fait aussi avec un site distinct sous une application avancée unique mais je considère plus correct de séparer tous les sites/applications chacun avec son espace de travail, tout le monde avec une installation Yii2, comme vous pouvez le voir sur ma question – MarBer