Ankündigung

Einklappen
Keine Ankündigung bisher.

Laravel 5.3 Form validation

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Laravel] Laravel 5.3 Form validation

    Hallo,

    Ich habe versucht einzubauen das beim Registrieren eines Users Fehlermeldungen kommen wenn er ein required oder unique falsch ausfüllt.
    Die Form wird bei einem Fehler zwar noch einmal geladen aber es kommen keine Fehlermeldungen.

    Hat vielleicht jemand eine Ahnung woran es liegen könnte?

    Danke,
    Reinhard

  • #2
    Ohne Quellcode nicht nein, wir können leider noch nicht hellsehen.

    Kommentar


    • #3
      Ich kenne mich zwar mit Laravel nicht aus, aber das hört sich sehr danach an, als wenn die Validierungsnachrichten im Template / View nicht ausgegeben würden.

      Im Symfony-Framework bspw. kann man über Twig die gesamte Form-Row ausgeben (Label, Widget und Errors) oder jedes dieser Elemente einzeln. Gibt man also bspw. statt der Form-Row nur das Widget ohne Errors aus, hat man genau das von dir beschriebene Verhalten, sprich eine funktionierende Validierung ohne Benachrichtigung für den User.

      Kommentar


      • #4
        Laravel erstellt eine Collection namens $errors welche alle Fehlermeldungen enthält.

        Kommentar


        • #5
          Zitat von Tropi Beitrag anzeigen
          Laravel erstellt eine Collection namens $errors welche alle Fehlermeldungen enthält.
          Das dachte ich auch aber in $errors ist nichts.

          Kommentar


          • #6
            Das liegt daran, dass du keine Fehlermeldungen im Controller zurück gibst.

            PHP-Code:
            $validator Validator::make($request->all(), [
                  
            'username' => 'required',
                  
            'password' => 'required|min:6',
            ]);

            if (
            $validator->fails()) {
                   return 
            redirect('/login')->withErrors($validator);

            Dann wird die $errors in der Session-Variable gefüllt und du kannst im Template darauf zugreifen, dort stehen dann als Key deine Inputnamen (username, password) alle die halt Fehler geworfen haben und als Value halt die Fehlermeldung.

            EDIT: Das kann man aber auch sehr gut in der Dokumentation von Laravel lesen: https://laravel.com/docs/5.3/validation

            Kommentar


            • #7
              Jetzt bekomme ich den Fehler
              Method [validate] does not exist on Redirect.

              Kommentar


              • #8
                Zeig uns deinen Quellcode...

                Kommentar


                • #9
                  Da ist er.

                  Code:
                      /**
                       * Get a validator for an incoming registration request.
                       *
                       * @param  array  $data
                       * @return \Illuminate\Contracts\Validation\Validator
                       */
                      protected function validator(array $data)
                      {
                          $validator =  Validator::make($data, [
                              'name' => 'required|max:255',
                              'username' => 'required|max:255|unique:users',
                              'email' => 'required|email|max:255|unique:users',
                              'password' => 'required|min:6|confirmed',
                          ],[
                          'email.unique' => 'The email already registered.',
                          'username.unique' => 'The username already registered.',
                          'email.required' => 'An email is required.',
                          'username.required' => 'An username is required.',
                          ]);
                  
                          if($validator->fails() ) {
                              return redirect('/login')->withErrors($validator); //->action('Auth\RegisterController@showRegistrationForm')->withErrors($validator);
                          }
                  
                      }
                  Aber eigentlich muss er auf Auth\RegisterController@showRegistrationForm ein redirekt machen.
                  Weil ich im showRegistrationForm folgendes brauche:

                  Code:
                     /**
                       * Show the application registration form.
                       *
                       * @return \Illuminate\Http\Response
                       */
                      public function showRegistrationForm()
                      {
                          $languages = Language::orderBy('name', 'asc')
                              ->where('state','active')
                              ->get();
                          $countries = Country::orderBy('name', 'asc')
                              ->where('state','active')
                              ->get();
                          return view('auth.register' ,
                              [
                                  'countries' => $countries,
                                  'languages' => $languages,
                                  'gender' => [ ['id' => 'Male', 'name' => 'Male' ], ['id' => 'Female', 'name' => 'Female'] ], // ist noch nicht fertig
                              ]
                          );
                      }

                  Kommentar


                  • #10
                    Wie sehen deine Imports aus? also "use"

                    Kommentar


                    • #11
                      Die sehen so aus:

                      PHP-Code:
                      use App\User;
                      use 
                      App\Http\Controllers\Controller;
                      use 
                      Illuminate\Http\Request;
                      use 
                      Illuminate\Support\Facades\Validator;
                      use 
                      Illuminate\Foundation\Auth\RegistersUsers;
                      use 
                      Auth;
                      use 
                      App\Country;
                      use 
                      App\Language

                      Kommentar

                      Lädt...
                      X