Цикл перенаправления в Laravel 5

Я занимаюсь серверной частью веб-сайта, пока изучаю Laravel. У меня есть роутер ниже:

Route::get('/update/survivor/flag', 'SurvivorsController@flagSurvivor');

Route::get('/submit/log/flag', 'LogsController@submitFlag');

А в функции flagSurvivor у меня есть:

public function flagSurvivor(Request $request){
    $this->validate($request,[
        'idFlagged'      =>  'required',
        'idFlagger'      =>  'required'
    ]);
    //Get the ids
    $id = $request->input('idFlagged');
    $flaggerid = $request->input('idFlagger');

    //Get the flagger name
    $survivors = Survivor::all();;
    $flaggerSurvivor = $survivors->find($flaggerid);

    //Flag a survivor
    $survivors = Survivor::all();;
    $flaggedSurvivor = $survivors->find($id);
    $flaggedSurvivor->flags = $flaggedSurvivor->flags+1;

    //Save updates
    $flaggedSurvivor->save();

    //Redirect
    return redirect('submit/log/flag')
        ->with('nameFlagged', $flaggedSurvivor->name)
        ->with('idFlagged', $id)
        ->with('nameFlagger', $flaggerSurvivor->name)
        ->with('idFlagger' , $flaggerid);
}

который отлично работает, за исключением части перенаправления. После вставки изменения в базу данных он должен отправить данные в функцию submitFlag, но это не так. Он просто зацикливается сам с собой, пока не выйдет из строя из-за слишком большого количества перенаправлений. Страница отправки журнала также работает нормально:

public function submitFlag(Request $request){
    $this->validate($request,[
        'nameFlagged'      =>  'required',
        'nameFlagger'      =>  'required',
        'idFlagger'        =>  'required',
        'idFlagged'        =>  'required'
    ]);
    $flaggerid = $request->input('idFlagger');
    $flaggedid = $request->input('idFlagged');
    $flaggername = $request->input('nameFlagger');
    $flaggedname = $request->input('nameFlagged');
    //Create a new log
    $flag = new Log;
    $flag->log = "The survivor $flaggername($flaggerid) reported that the survivor $flaggedname($flaggedid) is contaminated";
    //Save log
    $flag->save();
    echo "Success";
}

если я пойду в

localhost/submit/log/flag?idFlagger=1&idFlagged=2&nameFlagger=Matheus&nameFlagged=Tauan

Он повторяет «Успех» и вставляет журнал в БД. Но я просто не понимаю, почему он не работает, отправляя параметры в функции flagSurvivor. Я предполагаю, что я ошибаюсь в перенаправлениях, или, может быть, что-то в маршрутах я понятия не имею. Любая помощь приветствуется!

Оказывается, используя

return redirect('submit/log/flag?nameFlagged='.$flaggedSurvivor->name.'&idFlagged='.$id.'&nameFlagger='.$flaggerSurvivor->name.'&idFlagger='.$flaggerid);

Вместо того, что я использовал, работает правильно.

может быть, вам следует вызвать функцию, а не пытаться перенаправить. Я сомневаюсь, что данные, которые вы отправляете, будут приняты как запрос в submitFlag. Поэтому попробуйте вызвать submitFlag с помощью $ this-> submitFlag (передать параметры) и соответствующим образом изменить свою функцию submitFlag

Jigs1212 10.03.2018 06:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
408
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Измените ваш redirect на действие, а with's на ассоциативный массив:

//Redirect
return redirect()->action('LogsController@submitFlag', [
    'nameFlagged' => $flaggedSurvivor->name,
    'idFlagged' => $id,
    'nameFlagger' => $flaggerSurvivor->name,
    'idFlagger' => $flaggerid
]);

Перенаправление на действие контроллера

это действительно сработало, как задумано. Но, тем не менее, насколько я понял, это должно было сработать. Я подумал, что, возможно, они отправили переменные через POST по умолчанию, но я ничего не нашел об этом в Интернете. Есть какие-нибудь мнения по этому поводу?

Matheus D. Lima 12.03.2018 06:32
Примечание. RFC 1945 и RFC 2068 указывают, что клиенту не разрешено изменять метод перенаправленного запроса. Однако большинство существующих реализаций пользовательского агента обрабатывают 302, как если бы это был ответ 303, выполняя GET для значения поля Location независимо от исходного метода запроса. Коды состояния 303 и 307 были добавлены для серверов, которые хотят однозначно указать, какой тип реакции ожидается от клиента. Скорее всего, это будет перенаправление GET, но это в конечном итоге зависит от конфигурации сервера.
user320487 12.03.2018 08:46

Я никогда не связываю вызовы with, предпочитая использовать только один массив, как показано на рисунке, хотя я также думал, что он будет работать так, как вы.

user320487 12.03.2018 08:50

Другие вопросы по теме