2015-12-06 5 views
0

При создании ручного валидатор в Laravel вы можете прикрепить обратные вызовы для запуска после проверки завершается следующим образом:Laravel 5.1 Форма запроса проверки

$validator = Validator::make(...); 

$validator->after(function($validator) { 
    if (!Auth::validate(['email' => Auth::user()->email, 'password' => $this->input('old_password')])) 
    { 
     $validator->errors()->add('old_password', 'Invalid password'); 
    } 
}); 

Как вы можете сделать то же самое внутри формы запроса, т.е. где делать вы добавляете вышеупомянутую функцию обратного вызова в пример запроса формы ниже?

class AccountRequest extends Request 
{ 
    public function authorize() 
    { 
      return true; 
    } 

    public function rules() 
    { 
     return [ 
      'new_password' => 'required|confirmed|min:6'; 
      'old_password' => 'required'; 
     ]; 
    } 

} 

ответ

0

Ссылка на комментарий, вы должны подтвердить, что старый пароль равно существующему полю в БД, а также новый пароль = подтвержденный пароль.

Для достижения этой цели, первый построить валидатор клиента для Old Password:

<?php 

namespace App\Providers; 

use Validator; 
use Illuminate\Support\ServiceProvider; 

class AppServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     Validator::extend('existing', function($attribute, $value, $parameters, $validator) { 
      return \Hash::check($value, User::find($parameters[0])->password); 
     }); 
    } 

    /** 
    * Register the service provider. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 

Затем в форме запроса:

<?php 

namespace App\Http\Requests; 

use App\Http\Requests\Request; 

class FormRequest extends Request 
{ 
    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return false; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return [ 
      'old' => 'existing:'.\Auth::user()->id, 
      'password' => 'confirmed|required_with:old' 
     ]; 
    } 
public function messages() 
{ 
    return [ 
     'old.existing' => 'Wrong old password' 
    ]; 
} 


} 
+0

Я уже пробовал это, но получаю ошибку 'ReflectionException в Container.php строке 572: App класса \ Http \ Requests \ ValidationService не существует' – adam78

+0

В этом проблема, блог использует бета-версию Laravel 5, поэтому все изменилось. –

+0

Могу я спросить, зачем вам это нужно? На самом деле код в контроллере - это то, что должно запускаться после проверки, так зачем вам это нужно в запросе? –

0

Вы можете попробовать добавить public function after($request), и проверьте, работает ли это.

Смежные вопросы