“language> {language}> validation.php”의 유효성 검사 속성을 사용하여 읽기에 적합한 이름 (예 : first_name> First name)에 대한 : attribute 이름 (입력 이름)을 바꾸려고합니다. 사용하기 매우 간단 해 보이지만 유효성 검사기는 “좋은 이름”을 표시하지 않습니다.
나는 이것을 가지고있다:
'attributes' => array(
'first_name' => 'voornaam'
, 'first name' => 'voornaam'
, 'firstname' => 'voornaam'
);
오류 표시 :
@if($errors->has())
<ul>
@foreach ($errors->all() as $error)
<li class="help-inline errorColor">{{ $error }}</li>
@endforeach
</ul>
@endif
그리고 컨트롤러의 유효성 검사 :
$validation = Validator::make($input, $rules, $messages);
$ 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.'
);
누군가 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까? : attribute 이름을 속성 배열 (언어)에서 “nice name”으로 바꾸고 싶습니다.
감사!
편집하다:
문제는 Laravel 프로젝트에 기본 언어를 설정하지 않는다는 것입니다. 언어를 ‘NL’로 설정하면 위의 코드가 작동합니다. 하지만 내 언어를 설정하면 URL에 언어가 표시됩니다. 그리고 나는 그것을 선호하지 않습니다.
그래서 내 다음 질문 : URL에서 언어를 제거하거나 기본 언어를 설정하여 거기에 나타나지 않게 할 수 있습니까?
답변
네, “좋은 이름”속성은 몇 달 전에 진짜 “문제”였습니다. 이 기능이 이제 구현 되어 사용하기 매우 간단하기를 바랍니다.
간단하게이 문제를 해결하기 위해 두 가지 옵션을 나눌 것입니다.
-
전역 아마도 더 널리 퍼져있을 것입니다. 이 접근 방식은 여기에 잘 설명되어 있지만 기본적으로 application / language / XX / validation.php 유효성 검사 파일 을 편집해야 합니다. 여기서 XX는 유효성 검사에 사용할 언어입니다.
맨 아래에 속성 배열이 표시됩니다. 그것은 당신의 “좋은 이름”속성 배열이 될 것입니다. 귀하의 예를 따르면 최종 결과는 다음과 같습니다.
'attributes' => array('first_name' => 'First Name')
-
지역적으로 이것은 Taylor Otwell이 다음과 같이 말할 때이 문제 에서 이야기 한 내용입니다 .
이제 Validator 인스턴스에서 setAttributeNames를 호출 할 수 있습니다.
그것은 완벽하게 유효하며 소스 코드 를 확인하면
public function setAttributeNames(array $attributes) { $this->customAttributes = $attributes; return $this; }
따라서이 방법을 사용하려면 다음과 같은 간단한 예제를 참조하십시오.
$niceNames = array( 'first_name' => 'First Name' ); $validator = Validator::make(Input::all(), $rules); $validator->setAttributeNames($niceNames);
자원
Github 에는 많은 언어 패키지가 준비되어 있는 정말 멋진 저장소 가 있습니다. 확실히 당신은 그것을 확인해야합니다.
도움이 되었기를 바랍니다.
답변
이 특정 문제에 대한 정답은 app / lang 폴더 로 이동하여 파일 하단에 속성 이라는 배열이있는 validation.php 파일을 편집하는 것입니다 .
/*
|--------------------------------------------------------------------------
| 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
),
그래서 저는이 배열이 특별히 이러한 속성 이름을 사용자 지정하기 위해 만들어 졌다고 생각합니다.
답변
Laravel 5.2 이후로 다음을 수행 할 수 있습니다.
public function validForm(\Illuminate\Http\Request $request)
{
$rules = [
'first_name' => 'max:130'
];
$niceNames = [
'first_name' => 'First Name'
];
$this->validate($request, $rules, [], $niceNames);
// correct validation
답변
“속성”배열에서 키는 입력 이름이고 값은 메시지에 표시하려는 문자열입니다.
이와 같은 입력이있는 경우의 예
<input id="first-name" name="first-name" type="text" value="">
(validation.php 파일에있는) 배열은
'attributes' => array(
'first-name' => 'Voornaam'),
나는 똑같은 것을 시도했고 훌륭하게 작동합니다. 도움이 되었기를 바랍니다.
편집하다
또한 나는 당신이 매개 변수를 전달하지 않는다는 것을 알고 $errors->has()
있으므로 아마도 그것이 문제 일 것입니다.
다음과 같은 코드가있는 경우 컨트롤러에서이 확인을 수정하려면
return Redirect::route('page')->withErrors(array('register' => $validator));
그런 다음 이와 has()
같이 “등록”키 (또는 사용중인 모든 항목)를 메서드 에 전달해야합니다.
@if($errors->has('register')
.... //code here
@endif
오류 메시지를 표시하는 또 다른 방법은 내가 선호하는 다음 방법입니다.
@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>
답변
다음 과 같이 “좋은 이름”에 대한 입력으로 사용자 지정 언어 파일 을 사용 합니다.
$validator = Validator::make(Input::all(), $rules);
$customLanguageFile = strtolower(class_basename(get_class($this)));
// translate attributes
if(Lang::has($customLanguageFile)) {
$validator->setAttributeNames($customLanguageFile);
}
답변
Laravel 4.1에서이 작업을 수행하는 쉬운 방법은 lang 폴더-> 언어 (기본 en)-> validation.php로 이동하는 것입니다.
예를 들어 다음과 같이 모델에이 항목이있는 경우 :
'group_id' => 'Integer|required',
'adult_id' => 'Integer|required',
오류가 “그룹 ID를 입력하십시오”가되는 것을 원하지 않습니다. validation.php에 사용자 지정 배열을 추가하여 “좋은”유효성 검사 메시지를 만들 수 있습니다. 따라서이 예에서 사용자 지정 배열은 다음과 같습니다.
'custom' => array(
'adult_id' => array(
'required' => 'Please choose some parents!',
),
'group_id' => array(
'required' => 'Please choose a group or choose temp!',
),
),
이는 다국어 앱에서도 작동하므로 올바른 언어 유효성 검사 파일을 편집 (생성)하면됩니다.
기본 언어는 app / config / app.php 구성 파일에 저장되며 기본적으로 영어입니다. 이 App::setLocale
방법을 사용하여 언제든지 변경할 수 있습니다 .
답변
: attribute는 좋은 이름이 아닌 속성 이름 (귀하의 경우 first_name) 만 사용할 수 있습니다.
그러나 다음과 같이 메시지를 정의하여 각 속성 + 검증에 대한 사용자 지정 메시지를 정의 할 수 있습니다.
$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!',
);