根据发出请求的函数指定不同的规则集

时间:2015-08-12 17:48:53

标签: php laravel controller laravel-5

我希望在Request应用程序中创建一个Laravel 5.1,该应用程序根据调用它的函数具有一组特定的rules

例如,假设UsersController中有两个函数,即login()register()login()函数require只有两个输入 - usernamepassword,而register()函数require是三个输入 - {{1} },usernamepassword以及其他约束。如何创建一个email,称之为Request,可以根据UserRequest中的哪一个来处理与上述两个函数相对应的规则?

我不确定我是否可以尝试做什么,或者这是不是一个好习惯。请同样建议。

2 个答案:

答案 0 :(得分:3)

你有很大的灵活性,因为你可以用rules()方法做任何事情,你只需要一种方法来区分谁在使用Request

对于这个例子,我只是使用route()方法(它告诉你调用了什么路由),你可以这样做:

class MyRequest extends Request {
    /*
     * Request rules
     */
    protected $rules = [
        // login rules
        'login_route' => [
            'login' => 'required',
        ],
        // register rules
        'register_route' => [
            'login' => 'sometimes',
        ],
        // depends if you need it
        'default' => [
            'login' => 'sometimes',
        ]
    ];

    public function authorize()
    {
        return true; // or whatever
    }

    public function rules()
    {
        // where did this request come from?
        $route = $this->route();
        if(array_key_exists($route, $this->rules))
            return $this->rules[$route];
        return $this->rules['default'];
    }

}

还有其他方法,这取决于你的问题,你可以使用getMethod()检查请求方法(GET,POST ..)或检查一个段,或者在构造(依赖注入)上实例化一个对象来检查例如,如果用户登录或者不是,则确实如此。

但是,如果用例很复杂,最好分开两个请求。

希望这有帮助。

答案 1 :(得分:1)

您的意思是表单请求。在您的方法被激活之前,验证器会检查规则。如果无效,将返回无效消息数组,其状态为http状态422.请参阅下面的示例https://mattstauffer.co/blog/laravel-5.0-form-requests

<?php namespace App\Http\Controllers;

use App\Http\Requests\FriendFormRequest;
use Illuminate\Routing\Controller;
use Response;
use View;

class FriendsController extends Controller
{
   public function getAddFriend()
   {
      return view('friends.add');
   }

   public function postAddFriend(FriendFormRequest $request)
   {
      return Response::make('Friend added!');
   }
}

然后是表单请求类:

<?php namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Response;

class FriendFormRequest extends FormRequest
{
   public function rules()
   {
      return [
        'first_name' => 'required',
        'email_address' => 'required|email'
      ];
   }

   public function authorize()
   {
      // Only allow logged in users
      // return \Auth::check();
      // Allows all users in
      return true;
   }

   // OPTIONAL OVERRIDE
   public function forbiddenResponse()
   {
      // Optionally, send a custom response on authorize failure 
      // (default is to just redirect to initial page with errors)
      // 
      // Can return a response, a view, a redirect, or whatever else
      return Response::make('Permission denied foo!', 403);
   }

   // OPTIONAL OVERRIDE
   public function response()
   {
      // If you want to customize what happens on a failed validation,
      // override this method.
      // See what it does natively here: 

   }
}

你可以制作不同的独立&#39;表单请求并将它们用于控制器方法。

此处的官方文档:http://laravel.com/docs/master/validation#form-request-validation