Klassenname Kollision bei Verwendung von Codeigniter 2.0 mit Datamapper?

8

Ich benutze CI2.0 mit PHP 5.3

Ich habe gerade angefangen, "Datamapper ORM" zu verwenden und es ist ausgezeichnet !! Sie sind jedoch ein großes Problem hinsichtlich der Namen der Klassen

Ich habe eine Datenbanktabelle namens "users", also ist mein dm-Modell "user" und ich habe auch einen Controller mit dem gleichen Namen "user"?

also ist die Verwendung des "Benutzer" -Modells innerhalb des "Benutzer" -Controllers unmöglich !!

Was ist der beste Weg, um dieses Problem zu lösen?

Vielen Dank

Beste Grüße

    
ahmed 03.03.2011, 04:34
quelle

6 Antworten

16

Einer der Nachteile von CodeIgniter ist, dass Sie einen Controller, ein Modell oder eine Bibliothek nicht gleich benennen können. Dies ist hauptsächlich ein PHP-Problem, da Sie natürlich nichts gleich benennen können, aber es kann auf zwei Arten vermieden werden.

  1. PHP Namespaces - das geht nicht, sie sind nur PHP 5.3 und 90% der Community würden starten, wenn sie implementiert würden.
  2. Controller-Präfixe - Das würde ich gerne hinzufügen, aber ... nun, es würde für jeden etwas kaputt machen. Wir müssen bis 2,1 warten, zumindest für eine so große Veränderung.

Im Moment kann ich nur empfehlen, dass Sie Ihre Modelle und Bibliotheken sorgfältig benennen.

Controller - Benutzer
Bibliothek - Benutzerdatenbank Modell - Benutzermodell | Benutzer_m

Es ist nervig, aber nur eines dieser Dinge für jetzt.

    
Phil Sturgeon 03.03.2011 11:17
quelle
3
  

also mit dem "Benutzer" -Modell innerhalb der   "Benutzer" Controller ist unmöglich !!

Nein, das ist es nicht, Sie müssen den UserGuide sorgfältiger überprüfen;)

Sie können Ihrem Modell einen anderen Namen geben, als es orginal definiert ist:

  

Wenn Sie Ihr Modell zugewiesen haben möchten   zu einem anderen Objektnamen können Sie   spezifizieren Sie es über den zweiten Parameter von   die Ladefunktion:

%Vor%     
Jakub 03.03.2011 04:39
quelle
0

Sie müssen lediglich den Namen und den Klassennamen Ihres Controllers in "Benutzer" ändern. Sie müssen Ihren Modellnamen nicht ändern.

Controller: Benutzer
Modell: Benutzer
db-Tabelle: Benutzer

Sehen Sie sich die Datamapper-Dokumentation an.

    
David Xia 31.03.2011 04:05
quelle
0

Ich würde vorschlagen:

  • Controller - Benutzer oder / und Benutzer
  • Bibliothek - Users_lib oder Users_library oder User_lib oder User_library
  • Model - Users_model oder Users_m oder User_model oder User_m

Behalten Sie die Wörter Benutzer und Benutzer für den Controller bei, damit Sie eine nette URL behalten.

Stimmt nur mit der Verwendung von Plural oder Singular für das Modell und den Controller überein.

    
Parisiam 05.09.2012 03:18
quelle
0

Ich habe im Fall von 'Project' so genannt:

Controller:
Projekt erweitert MY_Controller erweitert CI_Controller

Modell:
ProjectModel erweitert das Modell

In der Ansicht
Projekt / ProjektManager // als Hauptinhalt
project / _projectItem // mit _ Unterstrich als Unteransicht

Das funktioniert überhaupt gut.

    
Stefan Brinkmann 27.03.2013 20:37
quelle
0

Die Art, wie ich damit umgehe, besteht darin, alle Namen meines Controllers mit _controller zu beenden.

Ich benutze auch Datamapper, also hatte ich viele Namenskollisionen. Für Benutzer habe ich einen Benutzer (Modell) und ein User_Controller .

Dann füge ich einfach hinzu:

%Vor%

zur Datei config / routes.php und voila.

Einziger Wermutstropfen ist, dass wenn Sie ein großes Projekt mit vielen Seiten haben (wie ich), Sie eine riesige routes.php Datei haben, besonders wenn Sie viele Funktionen haben, die viele Parameter haben Routing kann ziemlich schmerzhaft werden.

    
Haskabab 12.08.2013 02:29
quelle