我希望在Request
应用程序中创建一个Laravel 5.1
,该应用程序根据调用它的函数具有一组特定的rules
。
例如,假设UsersController
中有两个函数,即login()
和register()
。 login()
函数require
只有两个输入 - username
和password
,而register()
函数require
是三个输入 - {{1} },username
和password
以及其他约束。如何创建一个email
,称之为Request
,可以根据UserRequest
中的哪一个来处理与上述两个函数相对应的规则?
我不确定我是否可以尝试做什么,或者这是不是一个好习惯。请同样建议。
答案 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