Сохранить метод http при перенаправлении - PullRequest
0 голосов
/ 18 сентября 2018

Я написал помощник по локализации в , который проверяет, есть ли в URI en, fr или другой локальный адрес.Если языковой стандарт не указан, * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * К которой должен быть добавлен config("app.locale") к исходному URI и перенаправление к этому новому URIТ.е. /user тоже нужно перенаправить /en/user.

В настоящее время я пытаюсь решить эту проблему с помощью:

public function handle($request, Closure $next, $guard = null)
{
    $langSegment = $request->segment(1);

    // if first segment is language parameter then go on
    if (strlen($langSegment) == 2 && ($langSegment == 'en' || $langSegment == 'fr')) {
        App::setLocale($langSegment);
        return $next($request);
    } else {
        $newURL=url(config("app.locale") . "/" . implode("/",$request->segments()));       
        return redirect($newURL);
    }

}

Это прекрасно работает для большинства запросов, если метод не является POST и $language не установлено.В этом случае пользователь перенаправляет, но метод изменяется на запрос POST.

Я также пытался изменить свое перенаправление на

return redirect()->route('routeName', $request->all(), 302, ['method','POST'])

Но это также не работает.

1 Ответ

0 голосов
/ 19 сентября 2018

Итак, я провел некоторое тестирование в отношении кода состояния HTTP 307 .

Позвольте мне сначала описать мои настройки теста, я создал следующие маршруты:

Route::get("/help", 'HelpController@index');
Route::post("/post", 'HelpController@post');
Route::post("/redirected", 'HelpController@redirected');

HelpController содержит следующий код:

<?php

namespace App\Http\Controllers;

class HelpController extends Controller
{
    public function index(){
        return view('help');
    }

    public function post(){
        return redirect('/redirected', 307);
    }

    public function redirected(){
        echo "Success";
    }
}

и help.blade.php были очень простой формой, а именно:

<form method="post" action="/post">
    @csrf
    <button>Go</button>
</form>

Я рад сообщить, что код возврата 307 успешно сохраняет метод POST.

т.е. когда я зашел на URL /help и нажал кнопку «Перейти», я увидел сообщение «Успех», как и ожидалось.

Что это значит для меня, спросите вы?

Ну, мы можем решить ваши проблемы с очень простым изменением:

return redirect($newURL);

становится

return redirect($newURL, 307);

Разве это не было легко в конце?

Кроме того, как вы можете видеть в моей тестовой настройке, это также сохраняет защиту crsf, что является определенным плюсом с точки зрения безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...