Laravel 8: 如何在不同的页面(使用相同的布局)和组件之间共享一个 PHP 变量?
Laravel 8: How to share a PHP variable with different pages (using same layout) and components?
我正在开发这个网络应用程序 (Laravel 8),用户可以在其中选择他们的颜色主题。基本上,为了简单起见,假设每个用户都可以选择他们的 primary_color.
在首页(不需要认证),primary_color 将来自配置(无论用户是否认证)。在经过身份验证的页面上,primary_color 来自用户 table(对于经过身份验证的用户)。如果用户未通过身份验证,我还有一堆页面使用访客布局,如果用户通过身份验证,则使用应用程序布局。如果用户未通过身份验证,它们将使用配置中的 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 的视图编辑器。
它可以同时将数据附加到所有视图或多个视图。
来源:https://laravel.com/docs/5.0/views#view-composers
或者:看这里
https://www.digitalocean.com/community/tutorials/sharing-data-between-views-using-laravel-view-composers
您可以使用视图编辑器。在 AppServiceProvider
的 boot
方法下添加以下代码。
\Illuminate\Support\Facades\View::composer('*',function($view){
$userPrimaryColor = (Auth::user() && ! Route::is('home')) ? Auth::user()->config->color_theme : "yellow";
$view->with('primary_color', $userPrimaryColor);
});
第一个参数*
表示需要共享给所有视图。如果您需要几页中的那些,您可以将页面列表作为数组
传递
我正在开发这个网络应用程序 (Laravel 8),用户可以在其中选择他们的颜色主题。基本上,为了简单起见,假设每个用户都可以选择他们的 primary_color.
在首页(不需要认证),primary_color 将来自配置(无论用户是否认证)。在经过身份验证的页面上,primary_color 来自用户 table(对于经过身份验证的用户)。如果用户未通过身份验证,我还有一堆页面使用访客布局,如果用户通过身份验证,则使用应用程序布局。如果用户未通过身份验证,它们将使用配置中的 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 的视图编辑器。 它可以同时将数据附加到所有视图或多个视图。 来源:https://laravel.com/docs/5.0/views#view-composers 或者:看这里 https://www.digitalocean.com/community/tutorials/sharing-data-between-views-using-laravel-view-composers
您可以使用视图编辑器。在 AppServiceProvider
的 boot
方法下添加以下代码。
\Illuminate\Support\Facades\View::composer('*',function($view){
$userPrimaryColor = (Auth::user() && ! Route::is('home')) ? Auth::user()->config->color_theme : "yellow";
$view->with('primary_color', $userPrimaryColor);
});
第一个参数*
表示需要共享给所有视图。如果您需要几页中的那些,您可以将页面列表作为数组