重定向

您是视觉学习者吗?
通过我们深入的屏幕录制掌握 Livewire
立即观看

在用户执行某些操作(如提交表单)后,您可能希望将他们重定向到应用程序中的另一个页面。

由于 Livewire 请求不是标准的全页浏览器请求,因此标准的 HTTP 重定向将不起作用。相反,您需要通过 JavaScript 触发重定向。幸运的是,Livewire 公开了可在组件中使用的简单 $this->redirect() 帮助器方法。在内部,Livewire 将处理前端重定向的过程。

如果您愿意,您还可以在组件中使用 Laravel 的内置重定向实用程序

基本用法

以下是 CreatePost Livewire 组件的示例,该组件在用户提交创建帖子的表单后将用户重定向到另一个页面

<?php
 
namespace App\Livewire;
 
use Livewire\Component;
use App\Models\Post;
 
class CreatePost extends Component
{
public $title = '';
 
public $content = '';
 
public function save()
{
Post::create([
'title' => $this->title,
'content' => $this->content,
]);
 
$this->redirect('/posts');
}
 
public function render()
{
return view('livewire.create-post');
}
}

如您所见,当触发 save 操作时,还将触发重定向到 /posts。当 Livewire 收到此响应时,它将在前端将用户重定向到新 URL。

重定向到路由

如果您想使用其路由名称重定向到页面,则可以使用 redirectRoute

例如,如果您有一个路由名为 'profile' 的页面,如下所示

Route::get('/user/profile', function () {
// ...
})->name('profile');

您可以使用 redirectRoute 使用路由名称重定向到该页面,如下所示

$this->redirectRoute('profile');

如果您需要将参数传递给路由,则可以使用 redirectRoute 方法的第二个参数,如下所示

$this->redirectRoute('profile', ['id' => 1]);

重定向到预期

如果您想将用户重定向回他们所在的上一页,可以使用 redirectIntended。它接受一个可选的默认 URL 作为其第一个参数,如果无法确定上一页,则将其用作后备

$this->redirectIntended('/default/url');

重定向到全页组件

由于 Livewire 使用 Laravel 的内置重定向功能,因此您可以在典型的 Laravel 应用程序中使用所有可用的重定向方法。

例如,如果您将 Livewire 组件用作路由的全页组件,如下所示

use App\Livewire\ShowPosts;
 
Route::get('/posts', ShowPosts::class);

您可以通过向 redirect() 方法提供组件名称来重定向到该组件

public function save()
{
// ...
 
$this->redirect(ShowPage::class);
}

闪存消息

除了允许您使用 Laravel 的内置重定向方法外,Livewire 还支持 Laravel 的 会话闪存数据实用程序

若要将闪存数据与重定向一起传递,您可以使用 Laravel 的 session()->flash() 方法,如下所示

use Livewire\Component;
 
class UpdatePost extends Component
{
// ...
 
public function update()
{
// ...
 
session()->flash('status', 'Post successfully updated.');
 
$this->redirect('/posts');
}
}

假设要重定向到的页面包含以下 Blade 代码段,则用户在更新帖子后会看到“帖子已成功更新。”消息

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