2015-09-29 5 views
1

это моя функция обновления в UserControllerВозникли проблемы проверяющий на обновление (Laravel 5)

public function update_user_credentials(UpdateUserRequest $request) 
{ 
    $user = User::find($request->user()->id); 
    if(!$user) 
    { 
     return response('User not found', 404); 
    } 

    try 
    { 
     $data=Input::all(); 
     $user->fill($data); 
     var_dump($user); 
     exit; 
     $user->save(); 

    } 
     catch(Exception $ex) 
    { 
     return response($ex->getMessage(),400); 
     echo Success::get('message'); 
    } 

    return Redirect::back()->with('message','updated'); 
} 

мой UpdateUserRequest.php

<?php 
namespace App\Http\Requests; 

use App\Http\Requests\Request; 

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


    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 

      return [ 
       'first_name' =>'required', 
       'last_name'=>'required', 
       'url'=>'url', 
       'password'=>'min:6|confirmed', 
       'password_confirmation'=>'min:6', 
       'email'=>'email|unique:users,email',    
       ]; 
      } 

} 

Каждая колонка имеет свою собственную форму. Таким образом, обновление электронной почты имеет свою форму, как и пароль.

Когда я обновляюсь без установки UpdateUserRequest внутри моего контроллера обновлений, он отлично работает. Но когда я добавляю это для проверки, ничего не происходит. Я получаю ошибку 302, но у меня нет сообщений.

Я пробовал получать сообщения с валидаторами-> сообщениями, но ничего не получал.

Кроме того, если я ставлю в

protected $redirect = '/' 

Я попадаю. Это означает, что валидация работает правильно?

вот мои маршруты, если это поможет:

Route::get('/account/email',function(){ 
    $user=Request::user(); 
    $id = $user->id; 
    return Response::view('user.edit.email', compact('user')); 
}); 

Route::patch('/account/update','[email protected]_user_info'); 

Update Так что я понял, как выводить сообщения об ошибках и один из них было то, что "первое имя и фамилия требовалось. Но теперь я получаю эту ошибку, когда я пытаюсь обновить

ErrorException in UserController.php line 93: 
Missing argument 2 for App\Http\Controllers\UserController::update_user_credentials() 
in UserController.php line 93 
at HandleExceptions->handleError('2', 'Missing argument 2 for App\Http\Controllers\UserController::update_user_credentials()', '/Users/Jack/projects/makersBrand/laravel/app/Http/Controllers/UserController.php', '93', array('request' => object(UpdateUserRequest))) in UserController.php line 93 
at UserController->update_user_credentials(object(UpdateUserRequest)) 
at call_user_func_array(array(object(UserController), 'update_user_credentials'), array(object(UpdateUserRequest))) in Controller.php line 256 
at Controller->callAction('update_user_credentials', array(object(UpdateUserRequest))) in ControllerDispatcher.php line 164 
at ControllerDispatcher->call(object(UserController), object(Route), 'update_user_credentials') in ControllerDispatcher.php line 112 
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 114 
at ControllerDispatcher->callWithinStack(object(UserController), object(Route), object(Request), 'update_user_credentials') in ControllerDispatcher.php line 69 
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\UserController', 'update_user_credentials') in Route.php line 201 
at Route->runWithCustomDispatcher(object(Request)) in Route.php line 134 
at Route->run(object(Request)) in Router.php line 704 
at Router->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in Router.php line 706 
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 671 
at Router->dispatchToRoute(object(Request)) in Router.php line 631 
at Router->dispatch(object(Request)) in Kernel.php line 236 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in VerifyCsrfToken.php line 50 
at VerifyCsrfToken->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 49 
at ShareErrorsFromSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 62 
at StartSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37 
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 59 
at EncryptCookies->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in Kernel.php line 122 
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87 
at Kernel->handle(object(Request)) in index.php line 54 

Означает ли это, что «2» передается в валидации?

+0

Вы хотите увидеть сообщение об ошибке? – aldrin27

+0

'update_user_credentials()' функция исключает 2 параметра, но вы только передаете их один? Как выглядит ваш маршрут? Вы уверены, что у вас нет другой настройки маршрута или с использованием маршрута ресурса? – Jeemusu

+0

ohh thats, что это значит. У меня в контроллере $ (id). Я думал, что это пройдет, но это не так.Когда я удалил его, он работал – joejoeso

ответ

0

Я думаю, что ваше правило проверки не будет работать. Если вы обновите свои данные, в правиле проверки также проверьте ту же строку, которую вы обновляете. Что я пытаюсь сказать, так это предположим, что вы пытаетесь обновить строку с идентификатором 2, тогда, когда вы выполняете проверку, ваше правило проверки также проверяете строка с идентификатором 2 для уникальности для электронной почты. Предположите, что вы не обновили свой адрес электронной почты, а затем при проверке правильности проверки проверит всю строку, и она не найдет уникальную электронную почту и отобразит ошибку.

Ваш маршрут должен быть

Route::post('/account/update/{id}','[email protected]_user_info'); 

При обновлении ваших правил должны проверить все строки, кроме строки, которые вы updating.You может применить то же правила, чтобы создать и обновлять данные, как это

public function rules(){ 
return [ 
    'first_name' =>'required', 
    'last_name'=>'required', 
    'url'=>'url', 
    'password'=>'min:6|confirmed', 
    'password_confirmation'=>'min:6', 
    // you need to change here 

    'email'=>'email|unique:users,email,'.$this->route()->getParameter('id').',database_id'    
]; 
// database_id means your table primary key column i.e id 

} 

Я думаю, что ваша функция обновления должен выглядеть как этот

public function update_user_credentials(Requests\UpdateUserRequest $request,$id){ 
// code 
} 
+0

проверить, что у меня есть ответ на обновление, не было, после того, как адрес электронной почты и database_id означают, что ваш первичный ключ и getParameter ('id') здесь заменяют id вашим параметром – sixFingersMan

+0

Я все еще получаю исключение error. – joejoeso

+0

Я получаю '' 'ReflectionException в RouteDependencyResolverTrait.php строка 57: Класс App \ Http \ Controllers \ Requests \ UpdateUserRequest не существует''' – joejoeso

0

A Свободный способ справиться с этим в L5.3 + является использовать правило фасада

use Illuminate\Validation\Rule; 

Validator::make($data, [ 
    'email' => [ 
    'required', 
    Rule::unique('users')->ignore($user->id), 
    ], 
]); 

Обратите внимание, что вам необходимо определить правила валидации как массив вместо использования | чтобы разграничить правила.

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

  • Нет связанных вопросов^_^