Ich versuche, die Validierungsattribute in "Sprache> {Sprache}> Validierung.php" zu verwenden, um den Attributnamen (Eingabename) durch einen richtig lesbaren Namen zu ersetzen (Beispiel: Vorname> Vorname). Es scheint sehr einfach zu bedienen zu sein, aber der Validator zeigt die "netten Namen" nicht an.
Ich habe das:
'attributes' => array(
'first_name' => 'voornaam'
, 'first name' => 'voornaam'
, 'firstname' => 'voornaam'
);
Zum Anzeigen der Fehler:
@if($errors->has())
<ul>
@foreach ($errors->all() as $error)
<li class="help-inline errorColor">{{ $error }}</li>
@endforeach
</ul>
@endif
Und die Validierung im Controller:
$validation = Validator::make($input, $rules, $messages);
Das Array $ 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.'
);
Kann mir jemand sagen, was ich falsch mache. Ich möchte, dass der Attributname: durch den "netten Namen" im Attributarray (Sprache) ersetzt wird.
Vielen Dank!
BEARBEITEN:
Ich habe festgestellt, dass das Problem darin besteht, dass ich für meine Laravel-Projekte nie eine Standardsprache festgelegt habe. Wenn ich die Sprache auf 'NL' setze, funktioniert der obige Code. Wenn ich jedoch meine Sprache einstelle, wird die Sprache in der URL angezeigt. Und ich bevorzuge es nicht.
Also meine nächste Frage: Ist es möglich, die Sprache aus der URL zu entfernen oder die Standardsprache so einzustellen, dass sie dort einfach nicht angezeigt wird?
Antworten:
Yeahh, die "netten Namen" -Attribute, wie Sie sie nannten, waren vor einigen Monaten ein echtes "Problem". Hoffentlich ist diese Funktion jetzt implementiert und sehr einfach zu bedienen.
Der Einfachheit halber werde ich die beiden Optionen aufteilen, um dieses Problem anzugehen:
Global Wahrscheinlich umso weiter verbreitet. Dieser Ansatz wird hier sehr gut erklärt , aber im Grunde müssen Sie die Validierungsdatei application / language / XX / validation.php bearbeiten, wobei XX die Sprache ist, die Sie für die Validierung verwenden werden.
Unten sehen Sie ein Attributarray. Das wird Ihr Attribut-Array "nice name" sein. Wenn Sie Ihrem Beispiel folgen, wird das Endergebnis ungefähr so aussehen.
'attributes' => array('first_name' => 'First Name')
Vor Ort Dies ist, worüber Taylor Otwell in der Ausgabe sprach , als er sagte:
Das ist vollkommen gültig und wenn Sie den Quellcode überprüfen, werden Sie sehen
public function setAttributeNames(array $attributes) { $this->customAttributes = $attributes; return $this; }
Um diesen Weg zu verwenden, sehen Sie sich das folgende einfache Beispiel an:
$niceNames = array( 'first_name' => 'First Name' ); $validator = Validator::make(Input::all(), $rules); $validator->setAttributeNames($niceNames);
Ressourcen
Es gibt ein wirklich großartiges Repo auf Github , das viele Sprachpakete bereit hält. Auf jeden Fall sollten Sie es überprüfen.
Hoffe das hilft.
quelle
'name' => 'Customer name'
und in einer anderen Form könnte es sein'name'=>'Seller name'
. Ich bevorzuge meine Übersetzungen pro Modul, damit ich diese Werte auch als Beschriftungen für Formularfelder wiederverwenden kann. Daher stimme ich für eine lokale Lösung, aber wie rufe ich dann das Array $ niceNames aus meiner Sprachdatei ab? Und wie rufe ich auf,setAttributeNames
ohne eine neue Validator-Instanz zu erstellen, aber die in Controllern verfügbare Methode $ this-> validate () zu verwenden?$this->validate(Request $request, $rules, $messages, $customAttributes)
, um diese schönen Namen zu erhalten. Sehen Sie es in Laravel 5.1 API - Validate Request$validator = Validator::make(Input::all(), $rules);
$validator->setAttributeNames($niceNames);
$validator->setAttributeNames(Lang::get('my-language-file'))
.Die richtige Antwort auf dieses spezielle Problem wäre, in Ihren Ordner app / lang zu gehen und die Datei validation.php am Ende der Datei zu bearbeiten. Dort befindet sich ein Array namens Attribute :
/* |-------------------------------------------------------------------------- | Custom Validation Attributes |-------------------------------------------------------------------------- | | The following language lines are used to swap attribute place-holders | with something more reader friendly such as E-Mail Address instead | of "email". This simply helps us make messages a little cleaner. | */ 'attributes' => array( 'username' => 'The name of the user', 'image_id' => 'The related image' // if it's a relation ),
Daher glaube ich, dass dieses Array speziell für die Anpassung dieser Attributnamen erstellt wurde.
quelle
'attributes' => [ 'name' => 'nombre', 'mail' => 'correo', 'password' => 'contraseña', 'password2' => 'confirmación de contraseña', ],
Seit Laravel 5.2 konnte man ...
public function validForm(\Illuminate\Http\Request $request) { $rules = [ 'first_name' => 'max:130' ]; $niceNames = [ 'first_name' => 'First Name' ]; $this->validate($request, $rules, [], $niceNames); // correct validation
quelle
Im Array "Attribute" ist der Schlüssel der Eingabename und der Wert die Zeichenfolge, die Sie in der Nachricht anzeigen möchten.
Ein Beispiel, wenn Sie eine Eingabe wie diese haben
<input id="first-name" name="first-name" type="text" value="">
Das Array (in der Datei validation.php) sollte sein
'attributes' => array( 'first-name' => 'Voornaam'),
Ich habe das Gleiche versucht und es funktioniert großartig. Hoffe das hilft.
BEARBEITEN
Außerdem fällt mir auf, dass Sie keinen Parameter übergeben.
$errors->has()
Vielleicht ist das das Problem.Um dies zu beheben, überprüfen Sie im Controller, ob Sie einen solchen Code haben
return Redirect::route('page')->withErrors(array('register' => $validator));
dann müssen Sie
has()
den "Register" -Schlüssel (oder was auch immer Sie verwenden) wie folgt an die Methode übergeben@if($errors->has('register') .... //code here @endif
Eine andere Möglichkeit, Fehlermeldungen anzuzeigen, ist die folgende, die ich bevorzuge (ich verwende Twitter Bootstrap für das Design, aber natürlich können Sie diese mit Ihrem eigenen Design ändern).
@if (isset($errors) and count($errors->all()) > 0) <div class="alert alert-error"> <h4 class="alert-heading">Problem!</h4> <ul> @foreach ($errors->all('<li>:message</li>') as $message) {{ $message }} @endforeach </ul> </div>
quelle
<input type="text" name="txt[]" />"
. Der Fehler gibt so etwas wie ausThe txt.0 is required.
. Wie kann man es durch nette Namen ersetzen?Ich verwende meine benutzerdefinierten Sprachdateien als Eingabe für die "netten Namen" wie folgt:
$validator = Validator::make(Input::all(), $rules); $customLanguageFile = strtolower(class_basename(get_class($this))); // translate attributes if(Lang::has($customLanguageFile)) { $validator->setAttributeNames($customLanguageFile); }
quelle
In Laravel 4.1 gehen Sie dazu einfach in den Ordner lang -> Ihre Sprache (Standard en) -> validation.php.
Wenn Sie dies in Ihrem Modell haben, zum Beispiel:
'group_id' => 'Integer|required', 'adult_id' => 'Integer|required',
Und Sie möchten nicht, dass der Fehler "Bitte geben Sie eine Gruppen-ID ein" lautet. Sie können "nette" Validierungsnachrichten erstellen, indem Sie ein benutzerdefiniertes Array in validation.php hinzufügen. In unserem Beispiel würde das benutzerdefinierte Array folgendermaßen aussehen:
'custom' => array( 'adult_id' => array( 'required' => 'Please choose some parents!', ), 'group_id' => array( 'required' => 'Please choose a group or choose temp!', ), ),
Dies funktioniert auch mit mehrsprachigen Apps. Sie müssen lediglich die richtige Sprachüberprüfungsdatei bearbeiten (erstellen).
Die Standardsprache wird in der Konfigurationsdatei app / config / app.php gespeichert und ist standardmäßig Englisch. Dies kann jederzeit mit der
App::setLocale
Methode geändert werden.Weitere Informationen zu Fehlern und Sprachen finden Sie hier zur Validierung und Lokalisierung .
quelle
Das Attribut: kann nur den Attributnamen (in Ihrem Fall Vorname) verwenden, keine netten Namen.
Sie können jedoch benutzerdefinierte Nachrichten für jedes Attribut + Validierung definieren, indem Sie Nachrichten wie folgt definieren:
$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!', );
quelle
In Laravel 7.
use Illuminate\Support\Facades\Validator;
Dann definieren Sie niceNames
$niceNames = array( 'name' => 'Name', );
Und das letzte, setzen Sie einfach $ niceNames in den vierten Parameter, wie folgt:
quelle
Nun, es ist eine ziemlich alte Frage, aber ich möchte nur darauf hinweisen, dass das Problem, dass die Sprache unter der URL angezeigt wird, gelöst werden kann durch:
config/app.php
;Wenn dies erforderlich ist, um die Sitzung aufrechtzuerhalten, verwende ich derzeit den "AppServiceProvider", um dies zu tun. Ich denke jedoch, dass eine Middleware ein besserer Ansatz ist, wenn die Sprache nach URL geändert werden muss. Daher gefällt mir dies bei meinem Anbieter:
if(!Session::has('locale')) { $locale = MyLocaleService::whatLocaleShouldIUse(); Session::put('locale', $locale); } \App::setLocale(Session::get('locale'));
Auf diese Weise behandle ich die Sitzung und sie bleibt nicht bei meiner URL.
Zur Verdeutlichung verwende ich derzeit Laravel 5.1+, sollte aber nicht anders als 4.x sein.
quelle
$customAttributes = [ 'email' => 'email address', ]; $validator = Validator::make($input, $rules, $messages, $customAttributes);
quelle