95 votes

Attributs de validation Laravel : "noms agréables".

J'essaie d'utiliser les attributs de validation dans "language > {language}". > validation.php", pour remplacer le nom de l'attribut :(nom de l'entrée) par un nom correct à lire (exemple : first_name > Prénom). Cela semble très simple à utiliser, mais le validateur ne montre pas les "beaux noms".

J'ai ça :

'attributes' => array(
    'first_name' => 'voornaam'
  , 'first name' => 'voornaam'
  , 'firstname'  => 'voornaam'
);

Pour avoir montré les erreurs :

@if($errors->has())
  <ul>
  @foreach ($errors->all() as $error)
    <li class="help-inline errorColor">{{ $error }}</li>
  @endforeach
  </ul>
@endif

Et la validation dans le contrôleur :

$validation = Validator::make($input, $rules, $messages);

Le tableau $messages :

$messages = array(
    'required' => ':attribute is verplicht.'
  , 'email'    => ':attribute is geen geldig e-mail adres.'
  , 'min'      => ':attribute moet minimaal :min karakters bevatten.'
  , 'numeric'  => ':attribute mag alleen cijfers bevatten.'
  , 'url'      => ':attribute moet een valide url zijn.'
  , 'unique'   => ':attribute moet uniek zijn.'
  , 'max'      => ':attribute mag maximaal :max zijn.'
  , 'mimes'    => ':attribute moet een :mimes bestand zijn.'
  , 'numeric'  => ':attribute is geen geldig getal.'
  , 'size'     => ':attribute is te groot of bevat te veel karakters.'
);

Quelqu'un peut-il me dire ce que je fais mal ? Je veux que le :attribute name soit remplacé par le "nice name" dans le tableau des attributs (langue).

Merci !

EDIT :

J'ai remarqué que le problème est que je n'ai jamais défini de langue par défaut pour mes projets Laravel. Lorsque je fixe la langue à 'NL', le code ci-dessus fonctionne. Mais, lorsque je définis ma langue, la langue apparaît dans l'url. Et je préfère qu'elle ne le fasse pas.

Donc ma prochaine question : Est-il possible de supprimer la langue de l'url, ou de définir la langue par défaut pour qu'elle n'apparaisse pas ?

4voto

Wahyu Kodar Points 634

Dans Laravel 7.

use Illuminate\Support\Facades\Validator;

Ensuite, définissez niceNames

$niceNames = array(
   'name' => 'Name',
);

Et le dernier, il suffit de mettre $niceNames dans le quatrième paramètre, comme ceci :

$validator = Validator::make($request->all(), $rules, $messages, $niceNames);

2voto

J'utilise mon fichiers de langue personnalisés comme entrée pour le "jolis noms" comme ça :

$validator = Validator::make(Input::all(), $rules);
$customLanguageFile = strtolower(class_basename(get_class($this)));

// translate attributes
if(Lang::has($customLanguageFile)) {
    $validator->setAttributeNames($customLanguageFile);
}

2voto

Talha Masood Points 29
$customAttributes = [
'email' => 'email address',
];

$validator = Validator::make($input, $rules, $messages, $customAttributes);

1voto

Alexandre Danault Points 3443

L'attribut :ne peut utiliser que le nom de l'attribut (prénom dans votre cas), pas les noms agréables.

Mais vous pouvez définir des messages personnalisés pour chaque attribut+validation en définissant des messages comme ceci :

$messages = array(
  'first_name_required' => 'Please supply your first name',
  'last_name_required' => 'Please supply your last name',
  'email_required' => 'We need to know your e-mail address!',
  'email_email' => 'Invalid e-mail address!',
);

0voto

Victor Moura Points 11

Il s'agit d'une question assez ancienne, mais je pense que je devrais signaler que le problème de l'affichage de la langue dans l'URL peut être résolu de la manière suivante :

  • Changement de la langue et du fallback_language à config/app.php ;
  • ou en paramétrant \App ::setLocale($lang)

S'il est nécessaire de persister dans la session, j'utilise actuellement le "AppServiceProvider" pour le faire, mais, je pense qu'un middleware pourrait être une meilleure approche si le changement de langue par URL est nécessaire, donc, je fais comme cela dans mon fournisseur :

    if(!Session::has('locale'))
    {
        $locale = MyLocaleService::whatLocaleShouldIUse();
        Session::put('locale', $locale);
    }

    \App::setLocale(Session::get('locale'));

De cette façon, je gère la session et elle ne reste pas sur mon url.

Pour clarifier, j'utilise actuellement Laravel 5.1+ mais le comportement ne devrait pas être différent de celui de la version 4.x ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X