2015-01-20 1 views
0

업데이트 사용자 프로필 양식의 유효성을 검사하려고합니다. 유효성 검사를 통해 전자 메일이 이미 존재하지 않는지 확인해야하지만 사용자가 기존 전자 메일 유적.Laravel 4 양식 유효성 검사는 업데이트 양식에서 고유해야하지만 현재 인 경우 유효하지 않음

그러나 이것은 '이 이메일은 이미 사용되었습니다'라는 확인 오류 메시지를 계속 반환합니다.

내가 잘못 가고있는 곳이 정말로 확실하지 않습니다. 그렇지 않으면, 업데이트 양식이 작동하고 완벽하게 업데이트됩니다.

HTML

{{ Form::text('email', Input::old('email', $user->email), array('id' => 'email', 'placeholder' => 'email', 'class' => 'form-control')) }} 

경로

Route::post('users/edit/{user}', array('before' => 'admin', 'uses' => '[email protected]')); 

사용자 모델

당신은 검증

뭔가 등의 때때로 기능이 작업을 수행 할 수

'email' => 'unique:users,email,{{{ $id }}}' 
+0

사용자 모델에서'{{{$ id}}} '가 어떻게 바뀌나요? – patricus

+0

이전에는 컨트롤러에서이 작업을 수행했지만 모든 유효성 검사를 모델로 이동 했으므로이 작업은 수행하지 않습니다. 나는 이드를 모델에 전달하는 방법을 확신하지 못한다. 아마도 이것은 실패한 부분입니다 – user3189734

답변

1

:

$validator->sometimes('email', 'unique:users,email', function ($input) { 
    return $input->email == Input::get('email'); 
}); 

그러나, 당신은 검증을 시도하기 전에 고유 한 규칙에 {{{ $id }}}의 값을 업데이트해야합니다,

3

규칙은 특정 ID를 무시하기 위해 제대로 작성 대한 추가 정보를 원하시면 http://laravel.com/docs/4.2/validation#conditionally-adding-rules를 참조하십시오.

나는 반드시이 메서드의 큰 팬이 아니지만, 귀하의 규칙이 User 개체의 정적 특성이라고 가정하면 올바른 값을 가진 규칙을 수화하고 반환하는 정적 메서드를 만들 수 있습니다.

class User extends Eloquent { 
    public static $rules = array(
     'email' => 'unique:users,email,%1$s' 
    ); 
    public static function getRules($id = 'NULL') { 
     $rules = self::$rules; 
     $rules['email'] = sprintf($rules['email'], $id); 
     return $rules; 
    } 
} 
+0

좋은 답변입니다. 너의 의도를 알 겠어. – Rafael