【问题标题】:Having trouble validating on update (Laravel 5)更新验证时遇到问题(Laravel 5)
【发布时间】:2015-12-26 07:47:39
【问题描述】:

这是我在用户控制器中的更新功能

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','UserController@update_user_info');

更新所以我想出了如何显示错误消息,其中一个是“需要名字和姓氏”。但是现在当我尝试更新时出现此错误

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”被传递到验证中?

【问题讨论】:

  • 你想看错误信息吗?
  • update_user_credentials() 函数除了 2 个参数,但你只传递一个?你的路线是什么样的?您确定没有其他路线设置,或使用资源路线吗?
  • 哦,就是这个意思。我的控制器中有 $(id) 。我以为它被通过了,但事实并非如此。当我删除它时,它起作用了

标签: php laravel laravel-5 laravel-validation laravel-form


【解决方案1】:

在 L5.3+ 中处理此问题的一种流畅方式是使用 Rule 外观

use Illuminate\Validation\Rule;

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

请注意,您需要将验证规则指定为数组,而不是使用 |用于分隔规则的字符。

【讨论】:

    【解决方案2】:

    我认为您的验证规则不起作用。如果您更新数据,您的验证规则还会检查您正在更新的同一行。我想说的是,假设您正在尝试更新 id 为 2 的行,那么当您进行验证时,您的验证规则也会检查具有 id 2 的行以表示电子邮件的唯一性。假设您没有更新您的电子邮件,那么在验证您的验证规则时将检查所有行,它不会发现电子邮件是唯一的,它应该显示错误。

    你的路线必须是

    Route::post('/account/update/{id}','UserController@update_user_info');
    

    更新规则时,必须检查除您要更新的行之外的所有行。您可以应用相同的规则来创建和更新这样的数据

    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
    }
    

    【讨论】:

    • 检查我已经更新了答案,在 email 和 database_id 表示你的主键和 getParameter('id') 在这里用你的参数替换 id 之后,有缺失
    • 我收到ReflectionException in RouteDependencyResolverTrait.php line 57: Class App\Http\Controllers\Requests\UpdateUserRequest does not exist
    • 我已经在顶部做use UpdateUserRequest 所以我不知道是否真的需要Requests\UpdateUserRequest
    • 然后这样做:使用 Requests\UpdateUserRequest;
    • 感谢它现在有效。你告诉我的一切都有帮助,除了我不需要 Requests\UpdateUserRequest。我试图在我的控制器中将 $id 作为参数传递,但它并没有真正做任何事情。当我删除它的工作!感谢您的帮助!
    猜你喜欢
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多