Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Frameworki _ [Symfony] Dokładne przyrównania w metodach sprawdzających błędy formularzy

Napisany przez: eerie 15.04.2020, 10:54:21

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/master/src/Form/EditUserForm.php

Napisany przez: nospor 15.04.2020, 11:04:31

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 !http://www.php.net/empty($this->url)
  4. && http://www.php.net/substr($this->url, 0, 7) !== 'http://'
  5. && http://www.php.net/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

Napisany przez: ohm 15.04.2020, 11:40:58

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

A jak bys chcial recznie robic, to wydaje mi sie ze regexem byloby lepiej/ladniej.

Napisany przez: eerie 15.04.2020, 14:02:17

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

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