【发布时间】:2018-10-27 13:39:46
【问题描述】:
我在我的项目中创建了这个视图编辑器。但是当我运行该站点时,它会多次运行该类。我正在使用部分循环来生成一些菜单,这是多次调用视图的地方。而且因为我在每个视图中都设置了视图作曲家(view()->composer('*', ViewComposer::class);),所以该类被调用了 200 多次。我之前没有使用视图作曲家和单例,所以我不确定我在哪里做错了。
这是我的提供者:
namespace App\Providers;
use App\Http\Composers\ViewComposer;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider
{
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
view()->composer('*', ViewComposer::class);
}
/**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->singleton(ViewComposer::class);
}
}
这是我的观点作曲家
<?php
namespace App\Http\Composers;
use Illuminate\Contracts\View\View;
class ViewComposer
{
public function compose(View $view)
{
\Log::debug('view composer runned');
if( auth()->check() ){
$permissions = auth()->user()->permissions()
}
$view->with( "permissions", $permissions);
}
}
这有效,因此服务提供者在 config/app.php 中注册。但正如我所说,它多次运行 sql 查询和类。我哪里做错了?
【问题讨论】:
-
你的班级是什么样的?单例只保证一个实例,而不是只运行一次。
-
你的意思是什么类?举例来说,您的意思是该课程被疯狂一次,但无论如何都可以运行多次?我通过获取(注入)此类数据来创建一些菜单。但是因为我对所有视图(带有 *)使用这个视图作曲家,并且因为我在刀片视图基础上使用 (@)foreach 和 (@)include 执行这些循环,所以它在每个部分视图上运行 sql 查询。我想要的是只运行一次。
标签: laravel