【问题标题】:How to merge two Request in Laravel如何在 Laravel 中合并两个请求
【发布时间】:2015-12-13 20:59:28
【问题描述】:

在我的 Laravel (5.1) 项目中,我需要创建一个验证表单的请求。

但是对于这个请求,我想合并两个不同的请求:

第一个请求:

class AdvertisementRequest extends Request {

    public function authorize()
    {

        return true;
    }

    public function rules()
    {
        return [
            'ads_type' => 'required|numeric|in:0,1',
            'category' => 'required|numeric|exists:categories,id',
            'title' => 'required|alpha_num|max:45',
            'description' => 'required|alpha_num|max:2000',
            'price' => 'required|numeric',
        ];
    }

}

第二个请求:

class UserRegisterRequest extends Request {

    public function authorize()
    {

        return true;
    }

    public function rules()
    {
        $rules = [
            'form_type' => 'required|numeric|in:0,1',
            'user_type' => 'required|numeric|in:0,1',
            'phone' => 'required|phone_number',
            'region' => 'required|numeric|exists:regions,id',
            'department' => 'required|numeric|exists:departments,code',
            'postal_code' => 'required|postal_code',
            'city' => 'alpha|max:45',
            'id_city' => 'required|numeric|exists:cities,id',
            'last_name' => 'required|alpha_sp|max:45',
            'first_name' => 'required|alpha_sp|max:45',
            'pseudo' => 'required|alpha|max:45|unique:users',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|alpha_num|min:6|max:45',
        ];

        return $rules;
    }
}

我想创建第三个请求,像这样结合其他两个请求:

class UserAdvertisementRegisterRequest extends Request {

    public function authorize()
    {

        return true;
    }

    public function rules()
    {
        $rules = [
            'ads_type' => 'required|numeric|in:0,1',
            'category' => 'required|numeric|exists:categories,id',
            'title' => 'required|alpha_num|max:45',
            'description' => 'required|alpha_num|max:2000',
            'price' => 'required|numeric',

            'form_type' => 'required|numeric|in:0,1',
            'user_type' => 'required|numeric|in:0,1',
            'phone' => 'required|phone_number',
            'region' => 'required|numeric|exists:regions,id',
            'department' => 'required|numeric|exists:departments,code',
            'postal_code' => 'required|postal_code',
            'city' => 'alpha|max:45',
            'id_city' => 'required|numeric|exists:cities,id',
            'last_name' => 'required|alpha_sp|max:45',
            'first_name' => 'required|alpha_sp|max:45',
            'pseudo' => 'required|alpha|max:45|unique:users',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|alpha_num|min:6|max:45',
        ];

        return $rules;
    }
}

在不重复我的代码的情况下有什么解决方案吗?

对不起,我的英语不好:/。

提前感谢您的回复!

【问题讨论】:

    标签: php laravel laravel-5 http-post laravel-5.1


    【解决方案1】:

    最简单的方法是在 UserAdvertisementRegisterRequest::rules 方法中以下列方式生成合并的验证规则列表:

    class UserAdvertisementRegisterRequest extends Request { 
      public function rules()
      {
        return array_merge(
          with(new AdvertisementRequest)->rules(), 
          with(new UserRegisterRequest)->rules()
        );
      }
    }
    

    【讨论】:

      【解决方案2】:

      我试图通过扩展另一个请求并尝试将规则与父/子请求之间的逻辑结合起来,从而使合并变得聪明。对于 GET 和 POST,我也有不同的规则/格式,所以我的父请求类有一个函数可以根据它向我提供数据,这是我的一个转换器所期望的。

      但最终还是最好保持解耦,我发现可以将多个请求对象注入控制器。每个请求都将包含相同的值,但每个请求都将根据自己的规则验证请求。对于我的转换器,我只传递转换器期望的请求版本,以便它可以调用扩展的 get 函数并从那里进行转换。

      public function store(
          StoreEventRequest          $storeEventRequest, 
          UserListRequest            $userListRequest, 
          UserListRequestTransformer $transformer
      ) {
          $eventDetails     = $storeEventRequest->all();
          $userListIterator = $transformer->requestToUserList($userListRequest);
          ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-31
        • 1970-01-01
        • 2022-01-10
        • 1970-01-01
        • 2020-05-13
        • 2017-06-06
        • 2019-05-03
        相关资源
        最近更新 更多