【问题标题】:Laravel doesn't support multiple form requests in the single controller?Laravel 不支持单个控制器中的多个表单请求?
【发布时间】:2020-06-12 12:06:30
【问题描述】:

我有一个控制器,我使用不同的请求来验证每种方法的数据。我尝试使用具有完整命名空间的请求并通过导入,但在这两种情况下都不起作用。

例如

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use App\Http\Requests\UserRequest;
use App\Http\Requests\RegisterRequest;
use App\Http\Requests\PositionRequest;
use App\Http\Requests\UserOrderRequest;

class UserController extends Controller
{
    public function register(\App\Http\Requests\RegisterRequest $request)
    {
        // do something
    }

    public function positions(\App\Http\Requests\PositionRequest $request)
    {
        // do something
    }

    public function user(\App\Http\Requests\UserRequest $request)
    {
        // do something
    }

    public function orders(\App\Http\Requests\UserOrderRequest $request)
    {
        // do something
    }
}

在这个控制器中,laravel 找不到任何请求文件并返回错误消息:

ReflectionException: Class App\Http\Requests[Name of Request] 确实 文件中不存在 /home/c/website/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php 第 25 行

我的请求文件代码示例

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class RegisterRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            "name" => "required|min:3|max:100",
            "email" => "required|email|unique:users",
            "phone" => "required|numeric|unique:users",
            "positions" => "required|array|min:1|max:10",
            "positions.*.name" => "required|string|min:2|max:50|distinct",
            "password" => "required|min:8|string|max:255"
        ];
    }
}

我试过命令:

composer dump autoload

php artisan config:cache
php artisan config:clear
php artisan cache:clear
php artisan route:clear

Laravel 框架:6.17.0

PHP:7.4

【问题讨论】:

    标签: php laravel laravel-6 laravel-6.2


    【解决方案1】:

    未测试但尝试

    public function register(RegisterRequest $request)
    {
        //
    }
    

    您应该不需要完整的命名空间,因为您已经在顶部导入了它们。

    还要确保您在文件夹 App\Http\Requests 中有文件 UserRequest.php 并且它的命名空间匹配

    【讨论】:

      【解决方案2】:

      Request 类是什么样的?文件内容:

      App\Http\Requests\UserRequest
      App\Http\Requests\RegisterRequest
      App\Http\Requests\PositionRequest
      App\Http\Requests\UserOrderRequest
      

      确保这些文件的路径和名称、这些文件中的命名空间以及您在此文件中使用的 use 语句都完全匹配。大小写可能很重要,具体取决于您的服务器设置,因此一定要匹配大小写。

      由于您对它们有 use 语句,因此在注入它们时不需要使用完整的命名空间。

         public function orders(UserOrderRequest $request)
          {
              // do something
          }
      

      【讨论】:

        【解决方案3】:
        <?php
        
        namespace App\Http\Requests;
        
        use App\Http\Requests\Request;
        
        
        class RegisterRequest extends Request
        {
        
            public function rules()
            {
                return [
                    "name" => "required|min:3|max:100",
                    "email" => "required|email|unique:users",
                    "phone" => "required|numeric|unique:users",
                    "positions" => "required|array|min:1|max:10",
                    "positions.*.name" => "required|string|min:2|max:50|distinct",
                    "password" => "required|min:8|string|max:255"
                ];
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2015-12-20
          • 1970-01-01
          • 1970-01-01
          • 2023-02-18
          • 1970-01-01
          • 1970-01-01
          • 2017-05-08
          • 2023-03-13
          • 1970-01-01
          相关资源
          最近更新 更多