2017-03-02 1 views
0

Ich habe die Foren gesucht und viele ähnliche Probleme gesehen, aber keine, die meine Bedenken zu adressieren scheint. Ich glaube, das ist anders, weil:MethodNotAllowedHttpException generiert mit Rückgabe zurück() -> withInput() in Laravel 5.4

  1. Formularvalidierung wird an dieser Stelle nicht
  2. Die Form Methode scheint nicht (nur 1 Beitrag Aktion)
  3. Die Routen sind nicht in Web gewickelt bezogen werden genutzt Middleware

Hier ist, was die Anwendung tun werden soll:

  1. Ein Benutzer (mit oder ohne Authentifizierung) eine öffentliche Seite mit Formularansichten (display_event)
  2. Der Benutzer ein bestimmtes Ticket für die Bestellung auswählt und an eine zweite Form (register_step1) gerichtet
  3. Der Benutzer kann dann für so viele Tickets demografische Informationen füllt, wie sie
  4. bestellt wird
  5. Wenn die verwendete E-Mail-Adresse ein gültiger Benutzer ist (in DB), kehren Sie zum Formular in Schritt 2 zurück & 3, füllen Sie die Felder aus und zeigen Sie eine Nachricht an. Andernfalls würden die erforderlichen save() Aktionen ausgeführt. (Register_step2)

die betreffenden Strecken aus web.php sind hier:

Route::get('/events/{event}', '[email protected]')->name('display_event'); 
    Route::post('/register/{event}', '[email protected]')->name('register_step1'); 
    Route::post('/register/{event}/create', '[email protected]')->name('register_step2'); 

Die relevanten Teile des RegistrationController.php sind hier:

public function showRegForm (Request $request, $id) { 
    // Registering for an event from /event/{id} 
    $ticket  = Ticket::find(request()->input('ticketID')); 
    $quantity  = request()->input('quantity'); 
    $discount_code = request()->input('discount_code'); 
    $event   = Event::find($ticket->eventID); 
    return view('v1.public_pages.register', compact('ticket', 'event', 'quantity', 'discount_code')); 
} 

Und:

public function store (Request $request) { 

    $event = Event::find(request()->input('eventID')); 
    if(Auth::check()) { 
     $this->currentPerson = Person::find(auth()->user()->id); 
    } 

    // set up a bunch of easy-reference variables from request()->input() 

    $email = Email::where('emailADDR', $checkEmail)->first(); 

    if(!Auth::check() && $email === null) { 
     // Not logged in and email is not in database; must create 
     $person    = new Person; 
     // add person demographics from form 

    } elseif(!Auth::check() && $email !== null) { 
     // Not logged in and email is in the database; 
     // Should force a login -- return to form with input saved. 

     flash("You have an account that we've created for you. 
       Please attempt to login and we'll send you a password to your email address.", 'warning'); 

     return back()->withInput(); 

    } elseif(Auth::check() && ($email->personID == $this->currentPerson->personID)) { 
     // the email entered belongs to the person logged in; ergo in DB 
     $person   = $this->currentPerson; 
     // add person demographics from form 

    } elseif(Auth::check() && ($email->personID != $this->currentPerson->personID)) { 
     // someone logged in is registering for someone else in the DB 
     $person   = Person::find($email->personID); 
     // add person demographics from form 

    } else { 
     // someone logged in is registering for someone else NOT in the DB 
     $person    = new Person; 
     // add person demographics from form 
    } 

    // do more stuff... 
    $reg = new Registration; (set up a registration record) 
} 
+0

Die Umleitung erzeugt eine "GET" Anfrage. Müssen Sie Ihr Anmeldeformular wirklich über 'POST' zeigen? – apokryfos

+0

Der Beitrag hat die Eingabe von Formular 1 verarbeitet und dann angezeigt. Ich denke, ich kann das auseinander brechen, so dass der Verarbeitungsschritt ein Post ist und dann zu einem get umgeleitet wird, um das nächste Formular anzuzeigen. Ich werde das versuchen, und wenn das das Problem löst, vergebe die Antwort auf deinen Kommentar (vorausgesetzt, das ist möglich). :-) – Phil

+0

nein es ist nicht möglich aber mein kommentar ist auch nur das, ein kommentar, keine eigentliche antwort, beantworte aber deine eigene frage wenn es für dich funktioniert da es anderen helfen kann. – apokryfos

Antwort

0

Ich nahm die in @ apokryfos Kommentar angegebene Beratung und änderte das Formular Parsing-then-Display-Skript von einem POST zu einem get.

redirect() -> zurück() ist anscheinend immer eine Methode = get und das war die Ursache der MethodNotAllowedHttpException. In meinen ~ 2 Wochen mit Laravel war ich noch nicht auf diese Tatsache gestoßen.

Verwandte Themen