代码之家  ›  专栏  ›  技术社区  ›  Jignesh Joisar

为控制器中的每个新方法创建单独的请求类,或者在LayaVE中编辑现有的请求类或更好的想法更好吗?

  •  0
  • Jignesh Joisar  · 技术社区  · 8 年前

    为控制器中的每个新方法创建单独的请求类还是编辑LaaFLE中现有的请求类或更好的想法更好吗?

    例子

     class fooBarController {
    
          public function a(fooBarARequest $r) {
    
          }
    
          public function b(fooBarBrequest $r) {
    
          }
    
          public function c(fooBarCDRequest $r) {
    
          }
    
          public function d(fooBarCDRequest $r) {
    
          } 
     }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Namoshek    8 年前

    使用额外的请求类可以定义在请求到达控制器之前检查的验证规则。您还可以在请求类中处理授权。例如:

    class UpdateAccountEmail extends FormRequest
    {
        public function authorize()
        {
            return true; // authorization is handled on route/middleware level
        }
    
        public function rules()
        {
            return [
                'new_email'                 => 'required|email|confirmed',
                'new_email_confirmation'    => 'required',
            ];
        }
    }
    

    因此,总结一下:对于没有需要验证的有效负载的请求,使用自定义请求类是没有意义的。这意味着,对于正常人来说 GET 我们很可能(当然也有例外)希望使用 Request 等级由拉勒维尔提供。这样的控制器很正常:

    class AccountController
    {
        public function show(Request $request)
        {
            return view('account.show', ['user' => $request->user()]);
        }
    
        public function edit()
        {
            return view('account.edit', ['user' => \Auth::user()]);
        }
    
        public function updateEmail(UpdateAccountEmail $request)
        {
            $user = $request->user();
            $user->email = $request->input('new_email');
            $user->save();
    
            return redirect()->route('account.index');
        }
    
        public function logins(Request $request)
        {
            $logins = $request->user()->logins()
                ->when($request->get('filter_from'), function ($query, $from) {
                    $query->where('created_at', '>=', $from);
                })
                ->when($request->get('filter_until'), function ($query, $until) {
                    $query->where('created_at', '<=', $until);
                })
                ->get();
    
            return view('account.logins', ['logins' => $logins]);
        }
    }
    

    如你所见,为了 得到 由处理的请求 logins(Request $request) ,我们不使用自定义请求类,因为我们不需要验证任何内容(我们可以验证筛选器参数,但为了简单起见,我们不需要验证)。

    上面的示例还显示了检索当前用户的不同方法。即便如此,你也不需要任何请求。

    这不是实际的生产代码,只是我脑子里想出来的。。。

    推荐文章