Laravel-如何使用哈希重定向(#)

fic*_*489 7 laravel

我有链接:

example.com/register#register
Run Code Online (Sandbox Code Playgroud)

如果验证失败,laravel将重定向到:

example.com/register
Run Code Online (Sandbox Code Playgroud)

带有验证错误的位,没有哈希网址部分。如何使用#重定向到完整网址?

我知道我可以使用:

Redirect::to(route('register') . '#credits')
Run Code Online (Sandbox Code Playgroud)

但我想要完整的解决方案,所以我:

return back();
Run Code Online (Sandbox Code Playgroud)

将使用#重定向。

也许我需要重写一些代码?

小智 9

您可以使用路由名称先创建URL。

$url = URL::route('route_name', ['#hash_tag']);

Redirect::to($url);
Run Code Online (Sandbox Code Playgroud)

要么...

return Redirect::to(URL::previous() . "#hash_tag");
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案就像一个魅力!顺便说一句,也可以使用一个辅助程序来达到相同的结果:`redirect()-> route('route_name',['#hash_tag'])`。这是相同的逻辑,只是语法不同。 (2认同)

Pic*_*ard 8

但是如果你想获得正确的 URL,其中 hash 是片段部分而不是你应该使用的参数:

redirect(route('route_name', ['some_param_for_route']). '#hash')
Run Code Online (Sandbox Code Playgroud)

代替:

redirect()->route('route_name', [ 'some_param_for_route', '#hash' ])
Run Code Online (Sandbox Code Playgroud)

所以得到:

http://example.com/some_param_for_route#hash
Run Code Online (Sandbox Code Playgroud)

并不是:

http://example.com/some_param_for_route?#hash
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您还可以进一步链接它,例如:

redirect(route('route_name', ['some_param']). '#hash')->with('status', 'Profile updated!');
Run Code Online (Sandbox Code Playgroud)


小智 5

Laravel 9.x 的最佳解决方案

return to_route('route.name')->withFragment('#comments');
Run Code Online (Sandbox Code Playgroud)


小智 5

根据我的观点和您的要求,这是最好的选择。

你应该使用

return back()->withFragment('#hashtag');
Run Code Online (Sandbox Code Playgroud)