Laravel update konta usera

0

hej, robię update karty usera i napotkałem na mały logiczny problem.
Stworzyłem sobie swój UserRequest

    public function rules()
    {
        return [
            'name' => 'required|string|max:255',
            'password' => 'required|string|min:6|confirmed',
        ];
    }

chciałbym zrobić tak aby zmiana hasła nastąpiła tylko i wyłącznie wtedy gdy wypełnię pola dotyczące hasła. W tej chwili mój validator na to nie pozwala - gdy zostawiam puste krzyczy, że required.
Proszę o wsazówkę jak to osiągnąć? Ostatecznie zmianę hasła do konta zrobię jakimś modalem osobnym. Musiałoby to chodzić tak, że gdy wypełnię pola dotyczące haseł to podlega to walidacji gdy zostawię puste puszcza dalej - waliduje wszystko pozostałe

1

A czy to musi być required? Może da się tam dodać jakieś customowe validatory?

0

jest opcja "sometimes"
https://laravel.com/docs/5.5/validation#conditionally-adding-rules

ale ona działa tylko wtedy kiedy w przysyłanej kolekcji brak danego klucza. A password jest przesyłany z wartością NULL, więc to się nie nadaje.

0

Zrób to przez JS, zaraz przed wysłaniem formularza sprawdzaj przez javascript czy pole jest wypełnione, jeżeli nie, zrób je disabled i przeslij formularz, wtedy wartość nie będzie NULL, bo pole/parametr nie zostanie w ogóle wysłany

Np. w jquery:

$('#id-form').submit(function() {
  // Sprawdzasz czy pole jest puste czy nie
  // Wysylka form
});
0
axelbest napisał(a):

A czy to musi być required? Może da się tam dodać jakieś customowe validatory?

nie inaczej można ustawić własne reguły i powiadomienia praktycznie bez ograniczeń

0

Można to zrobić na kilka sposobów w UserRequest, np.:

  • sprawdzić parametr routera lub
  • o ile dobrze pamiętam to w Request powinieneś mieć też dostęp do $this->user() (czyli autoryzowanego user)
public function rules()
    {
        $rules = [
            'name' => 'required|string|max:255',
            'password' => 'string|min:6|confirmed',
        ];

        // route: users/{user}/update
        if ( ! $this->route()->hasParameter('user')) {
              $rules['password'] .= '|required';
        }

       return $rules;
    }
0

@Engine: Twój pomysł jest OK. Jednak jak wypełnię pola podczas edycji chciałbym je mimo wszystko walidować.
Pomysł z JS i disable wydaje się też ok. Jednak chciałbym go wykorzystać ostatecznie jak to co zapoczątkował @Engine się nie uda.

1 użytkowników online, w tym zalogowanych: 0, gości: 1