2016-03-24 4 views
0

Ich habe dieses Modell:Erstellen verknüpfter Datensatz Formular auf separate Seite mit CakePHP

School hasMany Teachers 

ich eine Ansicht Aktion/Seite auf meiner Schule Controller haben, wo ich ein „add new Lehrer für diese Schule“ setzen müssen, Verknüpfung. Dieser Link muss zur Lehrer hinzufügen-Seite führen, und der neue Lehrer muss von der vorherigen Seite auf die Schule verweisen.

ich diese auf meinem Link durch Hinzufügen eines Abfrage-String tue, wie:

<a href="/teachers/add?school_id=4">Add new teacher for this school</a> 

Da ist in meinem TeachersController gebe ich diesen Wert auf meine Ansicht (Lehrer :: add.ctp) als $ school_id und erstellen ein versteckter Eingang in dem add.ctp wie: So

$this->hidden('school_id', ['value' => $school_id]) 

wenn ich vorlegen der Lehrer Formular hinzufügen, sein school_id Feld richtig eingestellt ist.

Gibt es einen besseren Weg, dies zu tun? Ich bin nicht wirklich glücklich mit meiner Lösung und dem Abfrage-String-Trick (man könnte das in der Adressleiste ändern ...).

Dank

Antwort

1

Ich glaube, dass Sie die Informationen an die Aktion in irgendeiner Weise übergeben.

Statt einen Link ein Formular verwenden (Kuchen Formhelper ein formlink() Verfahren hierfür hat) und übergeben school_id über POST

Wie dem auch sei, auch wenn Sie POST-Daten verwenden, gibt es noch viele Möglichkeiten, wie ein Benutzer sind, könnten die Daten ändern .

Das Problem, das ich hier sehe, ist, dass Sie ein verstecktes Feld verwenden. Ich denke, es ist überflüssig, denn wenn Sie Ihre Daten /teachers/add?school_id=4 senden bereits Sie diese Informationen haben in der Abfrage Daten

so können Sie

$teacher = $this->Teachers->newEntity() 
$teacher = $this->Teachers->patchEntity($teacher , $this->request->data); 
$teacher->school_id = $this->request->query('teacher_id'); 
+0

Du hast Recht tun konnte ich meine verborgenen Eingang loszuwerden. Ich denke, mein Problem besteht darin, irgendeinen Kontext zu behalten. Was ist also mit der Verwendung der Session-Komponente zum Speichern und Verwenden meiner School-ID? Wäre es ein sauberer Weg? Ich könnte es in meiner School :: view Aktion setzen und es in meinem Lehrer verbrauchen :: hinzufügen ... – Flo

+1

Was passiert, wenn Sie verschiedene Schulen in verschiedenen Browser-Tabs öffnen? Der zuletzt geöffnete Tab speichert in der Session die 'schoold_id'. Aber wenn du dann zum ersten geöffneten Reiter gehst und auf "Lehrer hinzufügen" klickst, wirst du den Lehrer zur letzten Schule hinzufügen. – arilia

+0

in der Tat schlechte Idee:) ... auch wenn in meinem Anwendungsfall diese Situation nie passiert. – Flo