Laravel 5.6完整系列教程NO18-基础功能-HTTP重定向Redirect

★ 创建重定向

重定向响应是类 Illuminate\Http\RedirectResponse 的实例, 包含了重定向用户到其他 URL 所需要的合适头信息。有很多方式生成 RedirectResponse 实例。最简单的方法是使用全局的 redirect 辅助函数:

Route::get('dashboard', function () {
    return redirect('home/dashboard');
});

有时候你希望将用户重定向到他们的上一个访问位置,例如当提交的表单不合法时,你就可以通过全局的 back 辅助函数来这样做。 因为该特性使用了 session,请确保路由调用 back 函数时使用了 web 中间件组或者应用了全部的 session 中间件:

Route::post('user/profile', function () {
    // Validate the request...

    return back()->withInput();
});

★ 重定向到命名路由

当你不带参数调用 redirect 辅助函数时,会返回一个 Illuminate\Routing\Redirector 实例,它允许你调用 Redirector 实例上的任何方法。例如,你可以这样使用 route 方法为命名路由生成一个 RedirectResponse :

return redirect()->route('login');

如果你的路由包含参数,你可以把它们当做第二参数传给 route 方法:

// For a route with the following URI: profile/{id}

return redirect()->route('profile', ['id' => 1]);

■ 通过 Eloquent 模型填充参数

如果你要携带一个从 Eloquent 模型中填充过来的 “ID” 参数进行重定向,你可以简单的把该模型本身传进去。 ID 会被自动解析:

// For a route with the following URI: profile/{id}

return redirect()->route('profile', [$user]);

如果你想自定义路由参数的值,你应该在 Eloquent 模型中重写 getRouteKey 方法:

/**
 * Get the value of the model's route key.
 *
 * @return mixed
 */
public function getRouteKey()
{
    return $this->slug;
}

★ 重定向到控制器动作

你也可以生成重定向到 控制器动作。要达到这个目的,传递控制器名和动作名到 action 方法即可。记住,你不需要指定完整的控制器命名空间,因为 Laravel 的 RouteServiceProvider 会自动设置基础的控制器命名空间:

return redirect()->action('HomeController@index');

如果你的控制器路由需要参数,你可以把它们当做第二个参数传递给 action 方法:

return redirect()->action(
    'UserController@profile', ['id' => 1]
);

★ 闪存 Session 数据重定向

重定向到新的 URL 并且 闪存数据到 session 常常在同时完成。 通常的,这会在你成功的执行一个动作、闪存消息到 session 后完成。方便起见,你可以创建一个 RedirectResponse 实例并在单个的、流畅的方法链上闪存数据到 session :

Route::post('user/profile', function () {
    // Update the user's profile...

    return redirect('dashboard')->with('status', 'Profile updated!');
});

用户被重定向后,你可以从 session 中显示闪存消息。例如,使用 Blade 语法:

@if (session('status'))
    <div class="alert alert-success">
        {{ session('status') }}
    </div>
@endif

郑重声明:

1 本资源来源于互联网,资源的版权归资源原作者所持有,受《中华人民共和国著作权法》等相关法律保护。

2 由于无法和原作者取得联系,所以上传的部分资源无法先通过原作者的同意就分享给大家了,如本资源侵犯了您(原作者)的权益,请联系我们(微信号 wenyan90s),我们会立马删除您的资源,并向您表达诚挚的歉意!

3 本站是一个公益型网站,分享资源的目的在于传播知识,分享知识,收取一点点打赏的辛苦费是用于网站的日常运营开支,并非用于商业用途。

4 本站资源只提供学习和参考研究使用,使用过后请在第一时间内删除。本站不承担资源被单位或个人商用带来的法律责任。

发表评论