2015-02-12 19 views
6

Voglio convalidare gli URL in laravel. Le mie regole contengonoumlaut di convalida url laravel

"url" => "required|url" 

Questo funziona perfettamente. Ma quando un utente invia un url con dieresi, , il controllo delle regole fallirà sempre.

I caratteri come öäü ecc. Sono validi in domini tedeschi. C'è un modo in Laravel per accettare questi caratteri negli URL?

+0

L'unica cosa che posso pensare è scrivere una regola personalizzata usando regex, oppure puoi controllare come funziona la regola url nel framework e implementare la propria versione di esso, estendendolo? – haakym

+2

Oltre a scrivere un validatore personalizzato, una soluzione alternativa potrebbe essere quella di rimuovere gli umlaut prima della convalida. str_replace (['ä', 'ö', 'ü'], ['ae', 'oe', 'ue'], $ request-> url) – baao

risposta

5

Laravel utilizza filter_var() con l'opzione FILTER_VALIADTE_URL che non consente le dieresi. È possibile scrivere un validatore personalizzato o utilizzare la regola di convalida regex in combinazione con un'espressione regolare. Sono sicuro che troverete un here

"url" => "required|regex:".$regex 

O meglio specificare le regole come array per evitare problemi con i caratteri speciali:

"url" => array("required", "regex:".$regex) 

O, come @ Michael sottolinea, semplicemente sostituire gli umlaut prima di confermare. Basta fare in modo di salvare il vero seguito:

$input = Input::all(); 
$validationInput = $input; 
$validationInput['url'] = str_replace(['ä','ö','ü'], ['ae','oe','ue'], $validationInput['url']); 
$validator = Validator::make(
    $validationInput, 
    $rules 
); 
if($validator->passes()){ 
    Model::create($input); // don't use the manipulated $validationInput! 
} 
4

Grazie @ Michael e per me @lukasgeiter indicando la strada giusta. Ho deciso di pubblicare la mia soluzione, nel caso qualcuno abbia lo stesso problema.

ho creato un validatore personalizzato come:

Validator::extend('german_url', function($attribute, $value, $parameters) { 
     $url = str_replace(["ä","ö","ü"], ["ae", "oe", "ue"], $value); 
     return filter_var($url, FILTER_VALIDATE_URL); 
    }); 

Le mie regole contengono ora:

"url" => "required|german_url, 

Inoltre, non dimenticare di aggiungere la regola al file validation.php

"german_url"   => ":attribute is not a valid URL", 
+1

Questo sembra essere un buon modo per farlo! – baao