2017-01-06 5 views
0

Angenommen, ich habe den Benutzertyp "Lehrer" und ich habe eine Eintragsseite mit allen "Lehrern". Wie wäre es am besten, dies zu tun? Ich habe folgende Möglichkeiten:Separate Controller für Singular und Listing?

$teachers = new Teachers; 
$data = $teachers->getTeachers(); 

foreach($data as $teacher) { 
    echo $teacher->name 
} 

und meine singuläre Seite wäre:

$teacher = new Teacher('Jane Doe'); 
echo $teacher->name; 

Im Vergleich zu:

$teachers = new Teachers; 

$all = $teachers->getTeachers(); 

foreach($all as $teacher) { 
    echo $teacher->name; 
} 

und mein singuläres Wesen:

$teacher = $teachers->getTeacher('Jane Doe'); 
echo $teacher->name; 

Muss ich im Prinzip einen separaten Controller/ein separates Modell für die Auflistung und die Einzahl haben oder sie in eine Einheit integrieren?

Antwort

0

Was Sie brauchen, ist ein Modell namens Teacher, die verwendet werden kann, um alle oder einen Lehrer aus db zu bekommen. Natürlich ist das Modell auch verantwortlich für das Erstellen/Aktualisieren/Löschen von Lehrern.

class Teacher { // this should extend a Model class which share common methods to all models 

    public $id; 
    public $name; 

    public function __construct($id, $name) 
    { 
    $this->id = $id; 
    $this->name = $name; 
    } 

    public static function find($id) // this is a common method 
    { 
    // query db to get the teacher with given ID 
    // The results are assigned to $row variable 

    return self::createFromArray($row); 
    } 

    public static function all() 
    { 
    // query db to get all the teachers 

    $teachers = []; // instead of an array you can create a collection class which may have some useful methods 

    foreach ($rows as $row) { 
     $teachers[] = self::createFromArray($row); 
    } 

    return $teachers; 
    } 

    public static function get($attributes) 
    { 
    // you can build a query with where clause by given attributes (eg. if you want to search by name) 
    // after getting the results you can use the same example as all() method 
    } 

    public static function createFromArray($fields) // this is a common method 
    { 
    return new self(...$fields); // ... operator since PHP 5.6 
    } 
} 

In Ihrem Controller können Sie das Modell wie verwenden:

foreach (Teacher::all() as $teacher) { 
    echo $teacher->name; 
} 

oder

echo Teacher::find(1)->name; // echo the name of the teacher having ID 1 

oder

foreach (Teacher::get(['name' => 'John']) as $teacher) { 
    echo $teacher->name; 
} 

Dieses Beispiel wurde von Laravel inspiriert. Sie können sehen, wie die Modelle in Laravel verwendet werden, um mehr über dieses Konzept zu erfahren.

Ich habe Ihnen nur ein minimales Beispiel gegeben, wie man ein Modell erstellt und verwendet, aber Sie können mehr Dinge um diese Idee versuchen.

+0

Danke, mit unserem System unterscheidet es sich leicht von Ihrem Standard-MVC-Muster. Wir haben ein Backend 'Model' und einen Frontend 'Controller' für unsere Custom cms. Das hat es aber aufgeräumt :) –