Laravel 在所有视图中共享变量的服务提供商
Laravel service provider for sharing a variable in all views
我想在所有视图中共享一个变量,但我不确定这样做是否正确?我做了一个服务商:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Worktype;
class ShareWorktypesInViewsProwider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
$worktypes = Worktype::all();
view()->share('worktypes', $worktypes);
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
但我的观点仍然有误。我是否需要注册我的服务提供商,或者它应该开箱即用?
首先,对于这么小的一段代码,我不担心创建一个全新的服务提供者。我只想将以上内容添加到您的 AppServiceProvider
。此外,您还可以内联上述代码:
view()->share('worktypes', Worktype::all());
至于注册提供商。从字面上看,您所要做的就是转到 config/app.php
,找到 providers
数组并将您的提供商添加到其中。
在您的罐头中,您可以添加:
App\Providers\ShareWorktypesInViewsProwider::class,
它的文档:
https://laravel.com/docs/5.3/providers#registering-providers
希望对您有所帮助!
关于此的最新更新。虽然 @Rwd 解决方案效果很好,但您可能 运行 遇到困难,因为服务提供商对每个请求都是 运行。
因此,无论您是否在视图等,您最终都会从数据库中请求工作类型。
现在实现此目标的最佳方法是使用 Laravel View composers。
通过将以下内容添加到您的服务提供商中,您将仅在需要时在视图中调用 Worktype::all()。
view()->composer('*', function($view) {
$view->with(['worktypes' => Worktype::all()]);
});
尽管确保使用一些缓存,否则每次查看都会调用它!
我想在所有视图中共享一个变量,但我不确定这样做是否正确?我做了一个服务商:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Worktype;
class ShareWorktypesInViewsProwider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
$worktypes = Worktype::all();
view()->share('worktypes', $worktypes);
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
但我的观点仍然有误。我是否需要注册我的服务提供商,或者它应该开箱即用?
首先,对于这么小的一段代码,我不担心创建一个全新的服务提供者。我只想将以上内容添加到您的 AppServiceProvider
。此外,您还可以内联上述代码:
view()->share('worktypes', Worktype::all());
至于注册提供商。从字面上看,您所要做的就是转到 config/app.php
,找到 providers
数组并将您的提供商添加到其中。
在您的罐头中,您可以添加:
App\Providers\ShareWorktypesInViewsProwider::class,
它的文档: https://laravel.com/docs/5.3/providers#registering-providers
希望对您有所帮助!
关于此的最新更新。虽然 @Rwd 解决方案效果很好,但您可能 运行 遇到困难,因为服务提供商对每个请求都是 运行。
因此,无论您是否在视图等,您最终都会从数据库中请求工作类型。
现在实现此目标的最佳方法是使用 Laravel View composers。
通过将以下内容添加到您的服务提供商中,您将仅在需要时在视图中调用 Worktype::all()。
view()->composer('*', function($view) {
$view->with(['worktypes' => Worktype::all()]);
});
尽管确保使用一些缓存,否则每次查看都会调用它!