Bon, alors je crée un framework MVC en PHP et je veux qu'il soit assez flexible. Tout va bien - je travaille là-dessus en ce moment et tout va bien (donc je ne veux pas utiliser Zend ou un autre framework préexistant, haha!), Mais je voulais faire à la fois le framework et l'application assez dynamique. Je vais essayer d'expliquer:Qui vient en premier, le cadre ou l'application? Cadre dynamique et dossiers d'application
Voici une structure de répertoire simplifiée:
- index.php (wants to use app1 or app2 depending on domain name)
- /app1 (wants to use framework 1.1)
- /config
- config.php
- /app2 (wants to use framework 1.2)
- /config
- config.php
- /framework_1.1
- /framework_1.2
Un fichier Bootstrap /index.php reçoit toutes les demandes entrantes. Il charge alors un certain fichier de configuration de l'application de /app1/config/config.php ou /app2/config/config.php, etc, selon une certaine condition, par exemple .. l'hôte HTTP:
// /index.php
switch ($_SERVER[ 'HTTP_HOST' ]) {
case 'localhost':
$app_root = ROOT . 'app1/';
break;
case 'site.com':
$app_root = ROOT . 'app2/';
break;
default:
$app_root = ROOT . 'application/';
break;
}
define('APP_ROOT', $app_root);
le fichier d'amorçage puis charge le fichier de configuration de l'application:
// /index.php
include(APP_ROOT . 'config/config.php');
Un tableau de configuration $ sera retourné à partir du fichier de configuration de l'application, qui indiquera où les fichiers cadres sont situés.
// /app2/config/config.php
$config['framework_root'] = '/framework_1.2/';
Bootstrap exécute ce cadre.
// /index.php
include($config['framework_root'] . 'config/bootstrap.php');
Est-ce la meilleure façon de procéder?
Le seul problème avec cela, est que le fichier index.php doit savoir sur toutes les applications possibles, l'utilisateur devra modifier l'instruction switch dans /index.php (ou un /apps.php fichier que le /index.php inclut, peut-être?).
En outre, le fichier de configuration de l'application doit être chargé avant chargement des fichiers du cadre, ce qui me semble un peu bizarre ...
est-il un moyen simple de faire en sorte que la demande précise l'application, et l'application spécifie quel framework utiliser, ou est-ce la manière ci-dessus la plus simple? Désolé, si cela était déroutant!
me Confus un peu écrire;)
J'ai jeté un coup d'œil à Symphony mais je ne pense pas en savoir assez sur les espaces de noms pour pouvoir suivre efficacement le code2. Je vais continuer à l'étudier cependant. Le problème avec plusieurs fichiers "index.php" est le fait que beaucoup de code serait dupliqué à plusieurs reprises, et que toute petite modification devrait être répliquée dans chaque fichier. Désolé, je ne comprends pas très bien ce que vous entendez par le sous-classement de ma classe bootstrap pour définir ce qui doit être fait pendant le bootstrap. Pourriez-vous élaborer? Merci pour le conseil! Et je ne pense pas que je suis assez intelligent pour contribuer pour le moment;) – manbeardpig
Jetez un oeil à ProjectConfiguration de Symfony. Chaque nouveau projet aura un fichier bootstrap qui l'étendra. La répétition de code peut être éliminée avec des aides et un héritage orienté objet :) – yclian
OK, mais supposons que ma classe AppConfiguration doive étendre la configuration. Si j'appelle mon fichier de configuration d'application avant d'exécuter mon framework, comment AppConfiguration va-t-il savoir ce qu'est la configuration? La configuration ne serait-elle pas une classe dans le répertoire/classes/dir du framework? Ce qui signifie que cela changerait selon le cadre que l'application veut utiliser ...? – manbeardpig