【发布时间】:2022-01-16 13:30:39
【问题描述】:
我正在开发这个网络应用程序 (Laravel 8),用户可以在其中选择他们的颜色主题。基本上,为了简单起见,假设每个用户都可以选择他们的 primary_color。
在主页(不需要认证),primary_color 将来自配置(无论用户是否认证)。在经过身份验证的页面上,primary_color 来自用户表(针对经过身份验证的用户)。如果用户未通过身份验证,我还有一堆页面使用访客布局,如果用户通过身份验证,则使用应用布局。如果用户未通过身份验证,它们将使用配置中的 primary_color,如果用户通过身份验证,则使用用户选择的 primary_color。
所有这些页面都使用了一些需要知道primary_color的组件(按钮、导航链接等)。
我目前在每个需要知道 primary_color 的 php 文件顶部都有这一行:
$primary_color = (Auth::user() && Route::current()->getName() !== 'home') ? Auth::user()->config->color_theme : "yellow";
(颜色“黄色”在这里是硬编码的,忽略它。)
我很想避免那么多代码复制,但我似乎无法找到将这个变量从布局(guest.blade.php 或 app.blade.php)共享到页面的方法。我似乎也无法包含包含变量的 style.blade.php 视图。在此包含视图中声明的变量在页面的其余部分中不存在。我设法使用道具将变量传递给组件。它不是很好,但它工作正常。但这不是很好,我宁愿使用更清洁的解决方案。
但最重要的是,我如何避免在每页顶部复制相同的代码?
谢谢!
【问题讨论】:
-
laravel.com/docs/8.x/views#sharing-data-with-all-views 你可以使用 View::share
标签: laravel variables layout slot