В настоящее время я сталкиваюсь с некоторыми проблемами при использовании Laravel в качестве бэкэнда только для API.Я хочу разрабатывать интерфейс отдельно и поэтому рассматривать Laravel только как API.У меня есть проблемы при написании тестов.Я все еще использую группу веб-промежуточного программного обеспечения (не API), и при использовании промежуточного программного обеспечения auth
все работает, например, при тестировании с почтальоном, но при написании теста.
Пример
public function search_competitions_unauthorized ()
{
$response = $this->get('/competitions/ABCDEFG');
$response->assertStatus(401);
}
Конечная точка /competitions/ABCDEFG
защищена промежуточным программным обеспечением для аутентификации.
Я получаю код ответа 500, потому что нет маршрута с определенным именем login
.Это легко решить (создать маршрут с именем входа в систему), но я хочу, чтобы Laravel обрабатывал каждый запрос как запрос API, не имеющий перенаправлений.
Я пытался несколько вещей, чтобы избавиться отэто поведение.
Я определил новый класс "DefaultRequest", который расширяет Illuminate\Http\Request
class DefaultRequest extends Request
{
public function expectsJson()
{
return true;
}
public function wantsJson()
{
return true;
}
}
Я изменил index.php в общей папке.
$response = $kernel->handle(
$request = App\Http\Requests\DefaultRequest::capture()
);
Кроме того, все запросы, используемые в моих контроллерах, используют это как значение по умолчанию.Так как у меня была та же проблема с проверкой запроса, я также добавил этот метод к моему запросу по умолчанию.
protected function failedValidation(Validator $validator)
{
throw new HttpResponseException(response()->json($validator->errors(), 422));
}
У меня такое ощущение, что это должно было быть легче разрешить.Похоже, что в целом это будет проблемой только для меня во время тестирования, и я смог установить конкретные заголовки в своих тестах.Но я хотел отключить все эти способы перенаправления, так как НИКОГДА не хочу их для проекта.