2010-11-12 9 views
1

D'accord, j'ai un cadre minuscule que j'espère ouvrir prochainement et j'essaie d'implémenter des espaces de noms pour que les contrôleurs et les modèles n'aient pas besoin de texte ajouté. Voici la logique de code de base:Comment namespace dans une situation de contrôleur frontal en utilisant PHP

  • demande url
  • htaccess réachemine à index.php qui initie le cadre
  • cadre parse itinéraire & détermine quel contrôleur/action pour instancier & feu
    • front du cadre contrôleur est 'Contrôleur' ​​& contrôleurs de projet étendre 'Contrôleur' ​​

Ainsi, afin de permettre aux contrôleurs d'être nommé par exemple:

class Foo extends Controller {} 

et plus tard un modèle soit:

class Foo extends Model {} 

Ma structure de répertoire est comme ceci:

project/ 
    controllers/ 
     foo.php 
    models/ 
     foo.php 

Donc, je dois évidemment implémenter un espace de noms. (Et oui, je cours PHP 5.3). Donc ma question est, comment exactement j'implémenterais l'espace de noms où le contrôleur et le modèle avant sont étendus par d'autres contrôleurs et modèles?

+0

Intéressé à vérifier le projet comme et quand c'est fait .. !! –

Répondre

-1

Toujours vérifier php.net ... http://php.net/namespace

+0

J'ai déjà parcouru les docs de l'espace de noms de php (n'est-ce pas généralement une donnée?), Cependant, la nature de ma question est spécifique au namespacing avec un contrôleur frontal chargeant/tirant dynamiquement les contrôleurs de projet. Ce qui veut dire que je ne veux pas que les gens qui utilisent le framework aient à faire à Foo pour étendre le projet \ controllers \ Controller. 'use project \ controllers \ Foo as Foo' est ce dont j'ai besoin, mais ce n'est pas dynamique et cela nécessiterait d'être défini dans les fichiers du contrôleur de projet. Avoir du sens? – shanebo

+0

Ok, mais je n'ai jamais vu (et voir) le point des espaces de noms ... Il suffit de nommer les classes correctement ... – dododedodonl

+1

Ensuite, vous n'avez probablement jamais développé l'application. avec plus de 10 classes. – Crozin

0

Une façon de le faire serait de préfixer manuellement l'espace de noms en supposant que vos contrôleurs vivent dans le même espace. Prenons l'exemple suivant.

public function __construct($controller, $model) 
{ 
    $this->controller = 'Application\Controllers\\' . $controller; 
    $this->model  = 'Application\Models\\'  . $model; 
} 

Il peut y avoir un moyen plus autoload-ish de le faire, mais je pense que cela suffira dans la plupart des cas. Ne me citez pas, mais peut-être pourriez-vous utiliser Reflection et obtenir l'espace de noms de l'objet appelé. Toutefois, cela peut toujours nécessiter une convention de dénomination plus unique, sinon l'autochargeur ne sait toujours pas si vous appelez Controllers\Index.php ou Views\Index.php.