【问题标题】:Laravel Middleware Too few arguments to function errorLaravel Middleware Too little arguments to function error
【发布时间】:2021-04-09 11:06:49
【问题描述】:

我正在尝试设置一个中间件来检查表单提交时输入是否为空以更新用户设置,如果是,则将它们返回到同一页面并显示错误。当我设置它时,它给了我错误

Too few arguments to function App\Http\Middleware\AdminUserUpdate::handle(), 2 passed in /var/www/market/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php on line 167 and exactly 3 expected

好像是我通过的id,这里是我剩下的代码

中间件:


public function handle(Request $request, Closure $next, $id)
    {
        if($request->input('username') == NULL) {
            return redirect()->route('admin.members.view', $id)->with('error', 'You must enter a username for this user in order to update their account!');
        } elseif($request->input('email') == NULL) {
            return redirect()->route('admin.members.view', $id)->with('error', 'You must enter a email for this user in order to update their account!');
        } elseif($request->input('admin') == NULL) {
            return redirect()->route('admin.members.view', $id)->with('error', 'You must select whether this user is a root admin or not in order to update their account!');
        } elseif($request->input('banned') == NULL) {
            return redirect()->route('admin.members.view', $id)->with('error', 'You must select whether this user is banned or not in order to update their account!');
        } elseif($request->input('role') == NULL) {
            return redirect()->route('admin.members.view', $id)->with('error', 'You must select a role for this user in order to update their account!');
        }

        return $next($request);
    }

内核:

'AdminUserUpdate' => \App\Http\Middleware\AdminUserUpdate::class,

路线:

Route::middleware(['AdminUserUpdate'])->group(function () {
        Route::post('/app/members/{id}/submit', 'App\Http\Controllers\Admin\Members\IndexController@Submit')->name('admin.members.submit'); 
    });

我已经通过了 ID,因此我可以将它们返回到特定用户 ID 的视图页面,但由于某种原因它似乎不喜欢这样。有人有什么想法吗?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    中间件不读取路由参数。使用冒号将参数传递给中间件。

    Route::middleware(['AdminUserUpdate:123'])->group(function () {
    

    Link to Middleware Parameters docs

    【讨论】:

    • 对于每个用户 ID,我的视图页面究竟如何工作?
    • 不要使用中间件,而是在控制器方法的开头添加验证/重定向。
    • 是的,这就是我通常所做的,但希望控制器功能简洁明了 - 我想这不是我尝试做的选择。感谢您的帮助!
    【解决方案2】:

    我建议更改验证字段的方式。

    在您的情况下,此命令创建表单验证器文件

    php artisan make:request UpdateUserRequest
    

    在文件 UpdateUserRequest.php 中

    此块包含您要验证的所有规则

    public function rules()
    {
        return [
            'username' => 'required',
            'email' => 'required',
            ... other fields for validation ...
        ];
    }
    

    在你的 Controller 的 store 方法中,只需要这一行来操作验证后的所有数据:

    $validated = $request->validated();

    对于自定义消息,请将其添加到您的 UpdateUserRequest

    public function messages()
    {
        return [
            'username.required' => 'You must enter a username for this user in order to update their account!',
            'email.required' => 'You must enter a email for this user in order to update their account!',
            ... and other validation messages ...
        ];
    }
    

    有关验证表单的更多详细信息和方法,请查看链接:

    Form Request Validation

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 2022-12-19
      • 1970-01-01
      相关资源
      最近更新 更多