2010-11-22 7 views
0

Ich denke, dass dies eine einfache Lösung sein kann, aber ich habe eine Stunde lang vergeblich nachgegangen.CakePHP-Formular in einem Element, das Fehler verursacht

Ich habe ein Registrierungsformular in einem Element, das in Sichten verwendet wird, die zu verschiedenen Controllern gehören. Mit dem Attribut "url" habe ich angegeben, dass es an/users/register gesendet werden soll, aber aus irgendeinem Grund werden die Felder nicht an die Datenbank gesendet.

Stattdessen gibt es Fehler für "undefined index" und einen MySQL-Fehler für einen undefinierten Sekundärschlüssel, den ich gesetzt habe (er ist leer, weil er nicht übergeben wird). Seltsamerweise funktioniert das Formular gut, wenn ich das Element irgendwo in die Benutzeransichten einfüge. Weiß jemand, warum das passiert?

UPDATE - Hier ist der relevante Code, sorry:

<?php 
    echo $form->create(array(
     'id' => 'signupform', 
     'url' => array(
      'controller' => 'users', 
      'action' => 'register'))); 
?> 

Die Formularfelder sind alle richtig, da das Element überall in den Benutzer-Controller Ansichten funktioniert. Muss ich andere Informationen in die Erstellung des Formulars aufnehmen, um es direkt zu zeigen?

+1

Bitte geben Sie den Code für Ihr Element ein. – Leo

+0

Und was ist die Abfrage, die durch das Absenden dieses Formulars erzeugt wird? Verwenden Sie die Sicherheitskomponente? – bancer

Antwort

1

Geben Sie das Modell 'Benutzer' als ersten Parameter für die $ form-> create() -Methode an.

<?php 
    echo $form->create('User', array(
     'id' => 'signupform', 
     'url' => array(
      'controller' => 'users', 
      'action' => 'register') 
     ) 
    ); 
?> 

Dadurch wird sichergestellt, dass die Formularfelder als Daten [Benutzer] genannt werden [field_name], und verhindern Sie, dass nicht definierte Indexfehler nicht sehen.

Hoffe, das funktioniert für Sie!

0

Ohne den Code zu sehen, klingt es wie Cake magisch davon ausgeht, dass das Model das für den Controller ist, der die aktuelle Ansicht steuert. Wenn dieser Controller Benutzer ist, funktioniert es ordnungsgemäß. Wenn es, sagen wir, Artikel ist, versucht es (und scheitert), die Formularfelder an das Artikelmodell anzupassen.

Ohne Code zu sehen, ist es unmöglich, weitere Hilfe anzubieten.

EDIT:

Wenn das Formular enthält Mischmodelle, z.B. User und Artikel, Sie müssen Präfix die Feldnamen wie folgt aus:

$form->input('User.username'); 
$form->input('Article.title'); 

usw.

Wenn Sie nicht, die Steuerung übernehmen sie alle gehören zu ihr eigenes Modell.

+0

Ich habe den einzigen Teil des Elementcodes aktualisiert, der das Problem verursachen könnte. Irgendwelche Ideen, was das Problem hier sein könnte? Der Aktionsteil des HTML-Formulars scheint an die richtige Stelle zu gehen, aber es werden keine Daten aus dem Formular außerhalb der Benutzeransicht übergeben ... – Justin

+0

Ah-ha! Ich habe nicht bemerkt, dass CakePHP das Modell automatisch dort hineinstellt, aber das macht jetzt Sinn, wenn ich darüber nachdenke. Ich werde auch einen Kommentar zu den CakePHP-Dokumenten für diesen Abschnitt hinzufügen, falls jemand ein ähnliches Problem hat. Vielen Dank!!! – Justin

+0

Ok, verwandtes Problem: Können Fehlermeldungen in einem Element angezeigt werden? Im Moment wird es zur aktuellen Registrierungsansicht umgeleitet und zeigt dann die Fehlermeldungen an. Weißt du, wie das zu beheben ist? – Justin

Verwandte Themen