Laravel 4.2 Redirect :: to с параметрами GET

Есть ли возможность перенаправить на URL-адрес с параметрами GET, используя Redirect::to() в Laravel 4.2?

Я пытаюсь перенаправить пользователей после входа на запрашиваемую страницу, когда они не вошли в систему.

Если вы не вошли в систему и посещаете авторизованную страницу, я сохраняю полный запрошенный URL-адрес в сеансе (этот URL-адрес может быть чем-то вроде https://page.com/settings, https://page.com/post/23 или https://page.com/post/23?show=full. Вариантов много).

Когда вы затем входите в систему и у вас есть URL-адрес, сохраненный в вашем сеансе, я перенаправляю вас с помощью Redirect::to(https://page.com/post/23)

В первых двух случаях проблем нет, но когда я использую Redirect::to(https://page.com/post/23?show=full) GET, параметры игнорируются.

Есть ли возможность перенаправить на URL-адрес с включенными параметрами GET?


person Autista_z    schedule 14.04.2016    source источник


Ответы (4)


Возникла проблема с вашим приложением. Если я правильно вас понял, параметры вашего запроса (например: ?param=true&param2=1) отсутствуют в вашем URL-адресе после перенаправления.

Рассмотрим следующий пример:

Route::get('/test', function () {
    return Redirect::to('http://localhost:8000/test2?with=params');
});

Route::get('/test2', function () {
    echo '1';
});

Когда я пытаюсь получить доступ: localhost:8000/test, меня перенаправляют на: http://localhost:8000/test2?with=params

Это ожидаемое поведение. Можете ли вы опубликовать пример, где вы делаете это перенаправление?

Также я бы предложил использовать: Redirect ::tended (), который делает именно то, что вы хотите сами по себе.

person Ivanka Todorova    schedule 14.04.2016
comment
Есть ли разница, если я сделаю Redirect в routes.php или в каком-то контроллере? Не думаю, или? В моем контроллере есть это: if(Session::has('reqUrl')){ $url = Session::get('reqUrl'); //var_dump($url); --it return http://web.com/post/23?show=full Session::forget('reqUrl'); return Redirect::to($url)->with('message', trans('a.user-successfully-logged'))->with('message-type', 'ok'); } Так что я не знаю, в чем проблема. Тогда в маршрутах (для поста) у меня только: Route::get('post/{id}', array('before', => 'locale|auth', 'uses' => 'HomeController@getPost')); - person Autista_z; 14.04.2016
comment
@Autista_z Нет разницы, куда ты вернешь Redirect::to(). Вы пытались установить URL-адрес вручную вместо использования Session::get() только для отладки? - person Ivanka Todorova; 14.04.2016
comment
Я обнаружил свою ошибку, я тупой. Я использую сертификат SSL, но я сохранял URL-адрес в сеансе как http, а не https, а затем, если фильтры - if( ! Request::secure() ) {return Redirect::secure( Request::path() ); }, который не проходит дальше. - person Autista_z; 14.04.2016
comment
@Autista_z, нет, такое случается с кем угодно. Я просто хотел убедиться, что вы знаете, что передача параметров GET с Redirect::to() в порядке и проблема локальная. :П - person Ivanka Todorova; 14.04.2016

Попробуй это:

Вы можете передать его как https://page.com/post/23/showFull

А получить его можно следующим образом:

Request::segment(3);
person vipul sorathiya    schedule 14.04.2016
comment
Да, это решение, но не очень эффективное, потому что мне пришлось бы изменить множество методов. Приложение использует параметры Get на многих страницах, поэтому я бы предпочел сделать что-нибудь еще. - person Autista_z; 14.04.2016

Почему бы не Redirect :: back ()? Фильтр аутентификации должен иметь возможность перенаправлять все неавторизованные запросы на страницу входа, а затем Redirect :: back () пользователя на предыдущую посещенную страницу.

Изменить: фильтр, а не промежуточное ПО.

person Vlad Stoica    schedule 14.04.2016
comment
В Laravel 4.2 нет промежуточного программного обеспечения. - person Ivanka Todorova; 14.04.2016

В Laravel по умолчанию эта функция доступна, если вы используете промежуточное ПО для аутентификации, как показано ниже:

Route::group(array('before' => 'auth'), function(){

//authorized routes

});

Пример

Если пользователь не вошел в систему, он обращается к URL-адресу example.com/User?abc=123, который является авторизованным маршрутом.

Затем пользователь будет автоматически перенаправлен на страницу входа.

После успешного входа в систему пользователь будет автоматически перенаправлен на первый запрошенный URL ("example.com/User?abc=123").

person Arun D    schedule 29.04.2016