【问题标题】:Extending Illuminate\Http\Request clears Accept header扩展 Illuminate\Http\Request 清除 Accept 标头
【发布时间】:2015-11-27 03:25:36
【问题描述】:

我已扩展 Illuminate\Http\Request 类并将其传递给我的控制器。

在我的控制器中,我使用$request->wantsJson() 方法检查请求是否有Accept: application/json 标头。

如果我使用基本的Illuminate\Http\Request 类,它工作得非常好,但如果我使用我的扩展类,它会说 Accept 标头为空。

use Illuminate\Http\Request;

class MyRequest extends Request
{
   ...
}

控制器

class MyController
{
    public function search(MyRequest $request) {
        if ($request->wantsJson()) {
            // return json
        }
        // return view
    }
}

这不起作用。如果我用Illuminate\Http\Request 的实例替换MyRequest,它就可以工作。如果我 var_dump $request->header('Accept'),则在使用 MyRequest 时为 NULL。

【问题讨论】:

  • 你的 MyRequest 类中有 __construct() 方法吗?
  • @EricMakesStuff 不,我没有。我什至把所有的方法都去掉了,做成一个空白类来看看,还是不行

标签: json laravel request laravel-5.1 http-accept-header


【解决方案1】:

改为扩展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 执行一系列设置请求的配置步骤。当然,您可以在自己的服务提供商中复制它。

【讨论】:

  • 解决了,谢谢。实际上我最初扩展了FormRequest,但后来希望它可以被客人访问,所以function authorize()是我真正需要的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 2011-12-21
  • 2020-06-20
  • 2017-06-28
  • 2013-09-12
  • 2021-01-15
  • 1970-01-01
相关资源
最近更新 更多