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()
public function isUrlValid(): bool
{
return !http://www.php.net/empty($this->url)
&& http://www.php.net/substr($this->url, 0, 7) !== 'http://'
&& http://www.php.net/substr($this->url, 0, 8) !== 'https://';
}
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
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.