响应

创建响应

创建 Inertia 响应很简单。 首先,在您的控制器或路由中调用 Inertia::render() 方法,提供您要渲染的 JavaScript 页面组件 的名称以及页面的任何 props(数据)。

在下面的示例中,我们将传递一个名为 event 的单个 prop,它包含四个属性(idtitlestart_datedescription)到 Event/Show 页面组件。

use Inertia\Inertia;

class EventsController extends Controller
{
    public function show(Event $event)
    {
        return Inertia::render('Event/Show', [
            'event' => $event->only(
              'id',
              'title',
              'start_date',
              'description'
            ),
        ]);

        // Alternatively, you can use the inertia() helper...
        return inertia('Event/Show', [
            'event' => $event->only(
              'id',
              'title',
              'start_date',
              'description'
            ),
        ]);
    }
}
在 Laravel 应用程序中,Event/Show 页面通常对应于位于 resources/js/Pages/Event/Show.(js|vue|svelte) 的文件。
为了确保页面快速加载,只返回页面所需的最小数据。 此外,请注意,从控制器返回的所有数据都将在客户端可见,因此请确保省略敏感信息。

根模板数据

在某些情况下,您可能希望在应用程序的根 Blade 模板中访问您的 prop 数据。 例如,您可能希望添加元描述标签、Twitter 卡元标签或 Facebook Open Graph 元标签。 您可以通过 $page 变量访问此数据。

<meta name="twitter:title" content="{{ $page['props']['event']->title }}">

有时您甚至可能希望向根模板提供不会发送到 JavaScript 页面/组件的数据。 这可以通过调用 withViewData 方法来实现。

return Inertia::render('Event', ['event' => $event])
    ->withViewData(['meta' => $event->meta]);

调用 withViewData 方法后,您可以像访问 Blade 模板变量一样访问定义的数据。

<meta name="description" content="{{ $meta }}">

最大响应大小

为了启用客户端历史记录导航,所有 Inertia 服务器响应都存储在浏览器的历史记录状态中。 但是,请记住,一些浏览器对可以在历史记录状态中保存的数据量施加了大小限制。

例如,Firefox 的大小限制为 640k 个字符,如果超过此限制,则会抛出 NS_ERROR_ILLEGAL_VALUE 错误。 通常,这比您在构建应用程序时实际需要的要多得多。