Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Frameworki _ [inny][Laravel 5.2] Własne komunikaty błędów podczas logowania

Napisany przez: miccom 5.05.2018, 20:47:37

Cześć.
gdzie znajdę reguły aby zmienić treść komunikatu błędów logowania?

Aktualnie jeśli nie wypełnię formularza logowania i kliknę zaloguj to otrzymuję komunikaty:

  1. Pole email jest wymagane
  2. Pole password jest wymagane


Chciałbym sobie dać proste alerty- "wpisz email" czy "wpisz hasło"

Dziękuję za pomoc.

Napisany przez: SmokAnalog 6.05.2018, 00:55:48

Korzystasz z make:auth? Skąd wziąłeś tłumaczenia?

Domyślnie, polskie tłumaczenie walidacji powinno być w pliku /resources/lang/pl/validation.php. Tam możesz się bawić ile dusza zapragnie.

Napisany przez: Pyton_000 6.05.2018, 07:17:57

Z dokumentacji:

Cytat
Specifying Custom Messages In Language Files

In many cases, you may wish to specify your attribute specific custom messages in a language file instead of passing them directly to the Validator. To do so, add your messages to custom array in the resources/lang/xx/validation.php language file.

Kod
'custom' => [
    'email' => [
        'required' => 'We need to know your e-mail address!',
    ],
],

Napisany przez: r4xz 6.05.2018, 10:59:50

Jeśli chcesz to zrobić lokalnie tylko w formularzu logowania to możesz w LoginController nadpisać metodę validateLogin:

  1. /**
  2.   * Validate the user login request.
  3.   *
  4.   * @param \Illuminate\Http\Request $request
  5.   * @return void
  6.   */
  7. protected function validateLogin(Request $request)
  8. {
  9. $this->validate($request, [
  10. $this->username() => 'required|string',
  11. 'password' => 'required|string',
  12. ], [
  13. "{$this->username()}.required" => 'Wpisz login',
  14. 'password.required' => 'Wpisz hasło',
  15. );
  16. }


Możesz także nadpisać metodę sendFailedLoginResponse aby zmienić zachowanie po wpisaniu błędnych danych. W tym wypadku akurat lepiej zmienić tłumaczenie zapisane pod kluczem auth.failed:
  1. /**
  2.   * Get the failed login response instance.
  3.   *
  4.   * @param \Illuminate\Http\Request $request
  5.   * @return \Symfony\Component\HttpFoundation\Response
  6.   *
  7.   * @throws \Illuminate\Validation\ValidationException
  8.   */
  9. protected function sendFailedLoginResponse(Request $request)
  10. {
  11. throw ValidationException::withMessages([
  12. $this->username() => [trans('auth.failed')],
  13. ]);
  14. }


Zobacz sobie jak działa ten https://github.com/laravel/framework/blob/5.6/src/Illuminate/Foundation/Auth/AuthenticatesUsers.phptrait.

---EDIT---
Dałem informację dla Laravel 5.6, nie zauważyłem że sprecyzowałeś że chodzi o 5.2. Różnice są niewielkie więc przynajmniej jesteś trochę zmuszony aby to porównać i zrozumieć jak działa, zamiast zmieniać w ciemno smile.gif

Napisany przez: miccom 6.05.2018, 16:01:33

Piękne dzięki.
Właśnie tego mi brakowało, lang/validation smile.gif
Pozdrawiam.
Miccom

Ok, to podrzucę jeszcze jedne problem bo dotyczy tego samego wink.gif


W kontrolerze AuthController mam takie coś:

$this->validate($request, User::$login_validation_rules);

Ale w tym kontrolerze nie występuje funkcja validate.
gdzie ją znajdę?

Napisany przez: r4xz 6.05.2018, 16:03:54

To jest metoda dostarczana przez Laravel wraz z dziedziczeniem po klasie Controller - https://laravel.com/docs/5.2/validation#quick-writing-the-validation-logic

Napisany przez: miccom 6.05.2018, 16:40:56

Hmm, to wiem.
Chcę dostać się do elementu, który odsyła usera jeśli poda nieprawidłowe dane do rejestracji.

Aktualnie otrzymuję alerty ale stronę mam jako onepage, okno alertów mam jako position: fixed.
I aktualnie jest tak, że user jeśli np. nie poda poprawnego emaila przy rejestracji to odsyła go do góry strony, a ja chciałbym aby odsyłało go do kotwicy:) i kombinuję czy np.

  1. return redirect()->intended('/#register');


Mam taki kod w AuthController

  1. $this->validate($request, User::$login_validation_rules);
  2. $data = $request->only('email', 'password');
  3. if(\Auth::attempt($data)){
  4. return redirect()->intended('profil');
  5. }
  6. return redirect()->back()->with('message', 'błąd');

ale niestety ostatni return nie działa w ogóle, więc pewnie odesłanie z errorami występuje w $this->validate

Napisany przez: Pyton_000 7.05.2018, 07:33:13

https://laravel.com/docs/5.2/validation#other-validation-approaches Tu masz rozwiązanie swojego problemu smile.gif


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)