• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Własna walidacja w Symfony, jak stworzyć i zastosować

Mały hosting, OGROMNE możliwości
0 głosów
637 wizyt
pytanie zadane 21 lutego 2016 w PHP przez makoso Mądrala (7,380 p.)
zamknięte 21 lutego 2016 przez makoso

Witajcie, próbowałem z dokumentacją ale coś mi nie wychodzi w jaki sposób mogę stworzyć własną walidację aby później móc podać ją w adnotacji i tam wstawić jej opcjonalne parametry, chcę walidować string czy zawiera brzydkie słowa, klasę wyobrażam sobie mniej-więcej tak:
 

<?php
namespace BlogBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
/**
 * @Annotation
 */
class WrongWordsValidator extends ConstraintValidator
{
    public $words = [];//możliwość dodania dodatkowych słów
    public $message = "Podano brzydkie słowa, popraw swoją wypowiedź";//podstawowa wiodomość w przypadku błędów
    public $enableBasicWords = true;
    protected $basicWords = [];//tablica z przekleństwami, mam już przygotowaną ;)
    public function validate($value, Constraint $constraint)
    {
        $check = false;
        foreach(explode(' ',$value) AS $word){
            if(array_search($word, $this->basicWords)){
                $check = true;
            }
            if(array_search($word, $this->words)){
                $check = true;
            }
        }
        if ($check) {
            $this->context->buildViolation($this->message)
                ->setParameter('%string%', $value)
                ->addViolation();
        }
    }
}

nie rzuca błędem w przypadku użycia ale nie działa ;) nie mam pojęcia w jaki sposób to prawidłowo zrobić.

EDIT - ROZWIĄZANE

Powyższy kod wystarczy rozdzielić na dwa pliki, tak jak jest w dokumentacji, ja nie zauważyłem i wstawiłem wszystko do jednego.

http://symfony.com/doc/current/cookbook/validation/custom_constraint.html

komentarz zamknięcia: Rozwiązanie https://www.facebook.com/groups/336186653256637/permalink/470648313143803/?comment_id=470681126473855&notif_t=group_comment

1 odpowiedź

–1 głos
odpowiedź 21 lutego 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
PHP nie znam ale wyrażenia regularne ci się przydadzą
komentarz 21 lutego 2016 przez makoso Mądrala (7,380 p.)
w tym wypadku wyrażenia regularne nie są chyba wymagane, chcę wyrzucić błąd jeżeli w stringu przekazanym do walidatora znajdzie się jakiekolwiek słowo z tablicy z brzydkimi słowami, problem w tym jak to "uruchomić"
komentarz 21 lutego 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Ale zobacz np: twój program będzie trochę ułomny bo jak ktoś podoa słowo "Jesteś G ł U p I " z małych, dużych liter, odstępami to już tego nie wykryje. W przypadku wyrażeń regularnych zrobisz wyrażenie na dane przekleństwo i odpalisz funkcję czy znalazł takie wystąpienie w zdaniu i wyświetlisz adekwatny komunikat.
komentarz 21 lutego 2016 przez makoso Mądrala (7,380 p.)
nie sądzę, aby był tak mocno ułomny, mogę porównywać dane po zmniejszeniu liter, do przykładu który podałeś przydałoby się zastosować wyrażenia regularne ale ja ich nie potrafię stosować, nie próbowałem jeszcze więc chwilowo jak ktoś tak napiszę to przejdzie jednak samo zablokowanie podstawowych form zapisu wystarczy :)

a główny cel pytania jeszcze nie rozwiązany

Podobne pytania

0 głosów
3 odpowiedzi 735 wizyt
pytanie zadane 19 listopada 2015 w PHP przez Ehlert Ekspert (215,210 p.)
0 głosów
1 odpowiedź 415 wizyt
pytanie zadane 7 czerwca 2019 w PHP przez michal_php Stary wyjadacz (13,700 p.)
0 głosów
1 odpowiedź 583 wizyt
pytanie zadane 16 marca 2016 w PHP przez Else Stary wyjadacz (12,260 p.)

93,717 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,262 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...