Laravel中的位置标头

10
我正在使用一种针对我大学的身份验证系统(Ucam_Webauth)的库,这意味着我必须在其中一种方法中重定向到身份验证服务器。不幸的是,由于该库的架构,我无法返回 Redirect:to() 。该库本身使用 header('Location: ...'); 但出于某些原因,这并不能正常工作。
如果我在发送头部后使程序 die();,它可以正常工作,但否则就无法正常工作。
有任何想法如何解决这个问题吗?
4个回答

13
return redirect()->to('url')->send();

发送HTTP头和内容。在我的应用程序中,send()方法的作用类似于'exit()',并且可进行测试。


虽然这段代码可能有效,但最好稍微解释一下。 - A J
这个完美地运作。当你检查vendor/symfony/http-foundation/Response.phpResponse::send()的实现时,Laravel似乎清除了所有在头部重定向后可能运行的操作。当声明头部重定向之后还有代码行时,头部重定向通常会失败。 - Benny64
谢谢,这让我摆脱了“标头不能包含多个标头,检测到新行”的错误。 - Jaber Al Nahian

4

我不确定我理解了。Laravel在Redirect::to()方法中设置了Location标头。如果你想更明确地定义响应,可以像这样做。

return Response::make( '', 302 )->header( 'Location', $url );

如果这不起作用,我可能会退回到使用php stdlib header()并返回null。
如果所有这些仍然没有帮助,也许是分析器弄乱了事情。如果它已经打开,请尝试在配置中禁用它。

2
基本上,没有使用 die() 中止执行,header() 方法不起作用。我通过部分重写库来与 Laravel 的方法兼容来解决了这个问题。但我依然好奇是否有一种方法可以设置“Location”头信息而无需返回“Response”,因为调用 header('Location: ...'); 无效。 - GTF

0

尝试

return Redirect::to('url');

0
例如,对于这条路线:
Route::get('hello', array('as' => 'hello_name', 'uses' => 'HelloController@getHello'));

在Laravel中,您可以简单地使用以下代码将页面重定向到指定的URL:
return Redirect::to('hello');

或者,你可以简单地使用命名路由进行重定向

return Redirect::route('hello_name'); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接