2016-04-14 3 views
0

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

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

Если вы не вошли в систему, и вы посещаете авторизованному страницу, я сохраняю полную запрошенную 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 PARAMS игнорируется.

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

ответ

0

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

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

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

Request::segment(3); 
+0

Да, это решение, но не очень эффективное, потому что мне пришлось бы менять множество методов. Применение использует Get params на большом количестве страниц, поэтому я бы предпочел сделать что-то еще. –

1

Там это проблема с приложением. Если я правильно вас понимаю, ваши параметры запроса (например: ?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::intended(), который делает именно то, что вы хотите сам по себе.

+0

Есть ли какая-либо разница, если я делаю 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')) -> с ('message-type', 'ok'); } ' Так что я не знаю, где проблема. Затем в маршрутах (для сообщений) у меня есть только: 'Route :: get ('post/{id}', array ('before', => 'locale | auth', 'uses' => 'HomeController @ getPost ')); ' –

+0

@Autista_z Нет никакой разницы, когда вы возвращаете' Redirect :: to() '. Вы пытались установить URL-адрес вручную, вместо использования 'Session :: get()' только для отладки? –

+0

Я нашел свою ошибку, Im глупо. Я использую SSL-сертификат, но я сохранял url в сессии как ** http ** и ** ** https **, а затем, если фильтры 'if (! Request :: secure()) \t {return Redirect :: secure (Request :: path()); } ', который не проходит дальше. –

0

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

Редактировать: filter, не промежуточное.

+1

В Laravel нет никаких посредников 4.2. –

+0

@ Иванка Тодорова Спасибо, я отредактировал мое сообщение. –

0

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

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

//authorized routes 

}); 

Пример

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

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

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

Смежные вопросы