Расширение Illuminate\Http\Request очищает заголовок Accept

Я расширил класс Illuminate\Http\Request и передаю его своему контроллеру.

В моем контроллере я проверяю, есть ли в запросе заголовок Accept: application/json, используя метод $request->wantsJson().

Если я использую базовый класс Illuminate\Http\Request, он работает отлично, но если я использую свой расширенный класс, он говорит, что заголовок Accept имеет значение null.

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'), это NULL при использовании MyRequest.


person andrewtweber    schedule 01.09.2015    source источник
comment
У вас есть метод __construct() в вашем классе MyRequest?   -  person EricMakesStuff    schedule 01.09.2015
comment
@EricMakesStuff нет, не знаю. Я даже удалил все методы и сделал его пустым классом, просто чтобы посмотреть, и он все еще не работает.   -  person andrewtweber    schedule 01.09.2015


Ответы (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 выполняет ряд настроек шаги, которые настраивают запрос. Конечно, вы можете воспроизвести это в своем собственном поставщике услуг.

person EricMakesStuff    schedule 01.09.2015
comment
Это исправило, спасибо. На самом деле я изначально расширил FormRequest, но затем хотел, чтобы он был доступен для гостей, поэтому function authorize() было то, что мне действительно было нужно. - person andrewtweber; 02.09.2015