Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] Dokładne przyrównania w metodach sprawdzających błędy formularzy
eerie
post 15.04.2020, 10:54:21
Post #1





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


O ile się nie mylę, formularz w Symfony zwraca wartości w postaci niepustego string'a lub null'a dla braku wartości. Zaleca się, aby stosować dokładne przyrównania (===) wszędzie tam, gdzie to jest możliwa. W związku z tym mam wątpliwość, czy zapis z kodu poniżej jest poprawny:

Kod
    /**
     * @Assert\IsFalse(
     *     message="Strona www musi rozpoczynać się od znaków: http://"
     * )
     */
    public function isUrlValid(): bool
    {
        $urlValid = $this->url != ''
            && substr($this->url, 0, 7) != 'http://'
            && substr($this->url, 0, 8) != 'https://';

        return $urlValid;
    }


Czy nie powinienem zapisywać to w ten sposób (przyrównanie do null'a):

Kod
    /**
     * @Assert\IsFalse(
     *     message="Strona www musi rozpoczynać się od znaków: http://"
     * )
     */
    public function isUrlValid(): bool
    {
        return $this->url !== null
            && substr($this->url, 0, 7) !== 'http://'
            && substr($this->url, 0, 8) !== 'https://';
    }


Poza tym lepiej będzie chyba, jeśli return zwróci wynik bezpośrednio z równania, a nie ze zmiennej. Do tego (link poniżej) chyba źle nazwałem dwie metody sprawdzające. Powinno być isNewAndRepeatPasswordGiven() zamiast isNewOrRepeatPasswordGiven(). A także isNotUserEmail() zamiast isUserEmail().

https://github.com/webeeq/symfony.eeq/blob/...ditUserForm.php
Go to the top of the page
+Quote Post
nospor
post 15.04.2020, 11:04:31
Post #2





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Gdy cos moze byc pustym tekstem lub NULLem to nie mozesz porownywac tylko do jednego. Lepiej uzyj wiec empty()
  1. public function isUrlValid(): bool
  2. {
  3. return !empty($this->url)
  4. && substr($this->url, 0, 7) !== 'http://'
  5. && substr($this->url, 0, 8) !== 'https://';
  6. }


Choc tutaj wydaje mi sie i tak ze masz chyba bledy w warunkach logicznych.
&& substr($this->url, 0, 7) !== 'http://'
&& substr($this->url, 0, 8) !== 'https://';

chyba sie wykluczaja nawzajem albo ja zglupialem po swietach wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
ohm
post 15.04.2020, 11:40:58
Post #3





Grupa: Zarejestrowani
Postów: 618
Pomógł: 143
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


Pomijajac juz kwestie walidacji itp, to do adresow masz
https://symfony.com/doc/current/reference/c...raints/Url.html

A jak bys chcial recznie robic, to wydaje mi sie ze regexem byloby lepiej/ladniej.
Go to the top of the page
+Quote Post
eerie
post 15.04.2020, 14:02:17
Post #4





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


Ten warunek działa dobrze. Wyświetla się błąd, gdy podana jest wartość (adres URL) i nie zaczyna się od http:// i https:// jednocześnie. Ale faktycznie można to zrobić dużo prościej i lepiej.

Dzięki serdeczne za pomoc. smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 21:24