扩展 Illuminate\Http\Request 清除接受 header
Extending Illuminate\Http\Request clears Accept header
我已经扩展了 Illuminate\Http\Request
class 并将其传递给我的控制器。
在我的控制器中,我使用 $request->wantsJson()
方法检查请求是否有 Accept: application/json
header。
如果我使用基础 Illuminate\Http\Request
class 它工作得很好,但如果我使用我的扩展 class,它说 Accept header 是空的。
use Illuminate\Http\Request;
class MyRequest extends Request
{
...
}
控制器
class MyController
{
public function search(MyRequest $request) {
if ($request->wantsJson()) {
// return json
}
// return view
}
}
这不起作用。如果我将 MyRequest
替换为 Illuminate\Http\Request
的实例,它就可以工作。如果我var_dump$request->header('Accept')
,使用MyRequest时为NULL。
改为扩展 Illuminate\Foundation\Http\FormRequest
:
use Illuminate\Foundation\Http\FormRequest;
class MyRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
FormRequestServiceProvider
执行一系列设置请求的配置步骤。当然,您可以在自己的服务提供商中复制它。
我已经扩展了 Illuminate\Http\Request
class 并将其传递给我的控制器。
在我的控制器中,我使用 $request->wantsJson()
方法检查请求是否有 Accept: application/json
header。
如果我使用基础 Illuminate\Http\Request
class 它工作得很好,但如果我使用我的扩展 class,它说 Accept header 是空的。
use Illuminate\Http\Request;
class MyRequest extends Request
{
...
}
控制器
class MyController
{
public function search(MyRequest $request) {
if ($request->wantsJson()) {
// return json
}
// return view
}
}
这不起作用。如果我将 MyRequest
替换为 Illuminate\Http\Request
的实例,它就可以工作。如果我var_dump$request->header('Accept')
,使用MyRequest时为NULL。
改为扩展 Illuminate\Foundation\Http\FormRequest
:
use Illuminate\Foundation\Http\FormRequest;
class MyRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
FormRequestServiceProvider
执行一系列设置请求的配置步骤。当然,您可以在自己的服务提供商中复制它。