我有一个部分页面“侧边栏”,显示在每一页。在那里我的标志是动态的。为了显示我的徽标,我已经通过仪表板控制器发送变量,但是它显示的是未定义的变量。问题似乎正在发生,因为"/dashboard“被称为不是侧栏的”侧栏“--我已经在仪表板控制器中编写了它的部分--那么,我如何使它工作呢?
未定义变量:徽标(视图: C:\xampp\htdocs\odan\resources\views\admin\partials\sidebar\sidebar.blade.php) (视图: C:\xampp\htdocs\odan\resources\views\admin\partials\sidebar\sidebar.blade.php) (视图: C:\xampp\htdocs\odan\resources\views\admin\partials\sidebar\sidebar.blade.php) ))
仪表板控制器
public function sidebar()
{
$data['logos'] = Setting::first();
return view('admin.layouts.app', $data);
}Sidebar.blade.php
<!-- Brand Logo -->
<a href="index3.html" class="brand-link">
<img src="{{asset('uploaded/'.optional($logos)->image)}}" alt="Odan Logo"
class="brand-image img-circle elevation-3" style="opacity:.8">
<span class="brand-text font-weight-light">Odan</span>
</a>app.blade.php
<body class="hold-transition sidebar-mini layout-fixed">
<div class="wrapper">
@include('admin.partials.navigation.navbar')
@include('admin.partials.sidebar.sidebar')
@yield('content')
@include('admin.partials.footer.footbar')
</div>发布于 2019-08-04 03:08:02
侧栏调用每个刀片文件,因此您应该为此调用助手函数。更改composer.json文件:
"autoload": {
"files": [
"app/helpers.php"
],
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/"
}
},运行:
composer dump-autoload在应用程序文件夹中创建helpers.php文件。
并在helpers.php中编写您的函数。
function sidebar()
{
$data['logos'] = Setting::first();
return $data;
}并在sidebar.php中调用该函数。
发布于 2019-08-04 04:25:43
传递给admin.layouts.app的admin.layouts.app在sidebar中不存在
当您从视图中@include视图时,框架正在编译一个新视图,而传递给第一个视图的$data不会持久化到新视图,这称为shared view。
对于您的问题,有几种解决方案,从最快到最好:
1)直接将其传递给共享视图
@include('admin.partials.sidebar.sidebar', ['logos' => $logos])这将“共享”shared view所需的数据。不用说,这不是最好的解决办法。
2) ->share()方法
在您的控制器中,执行以下操作:
view()->share('logos', Setting::first());这将在所有视图(包括共享视图)中创建$logos变量。可能将呼叫放置在服务提供商中,这样您就不会有重复的代码。
3)视图作曲家
这是一个非常好的解决方案,如果您对它感兴趣,请阅读这篇关于视图作曲家的文章
希望能帮上忙。
发布于 2021-01-26 18:14:16
您可以使用提供者和作曲家来实现您的目标。
第一步
首先,在App\Http\View\composers目录中创建一个Composer类,如果您已经没有这个目录,可以创建一个
在那里创建一个文件SidebarComposer,您必须将数据分配给compose方法。下面我共享一个完整的编写器代码
<?php
namespace App\Http\View\composers;
use Illuminate\View\View;
use App\Models\SideMenu;
class SidebarComposer
{
protected $sidemenuItems;
public function __construct(SideMenu $SideMenu)
{
$this->sidemenuItems = $SideMenu::getAll();
}
public function compose(View $view)
{
$view->with('menuItems', $this->sidemenuItems);
}
}在这里,我调用Model获取数据,但您可以调用任何您喜欢的controller或repository
第二步:
创建一个服务提供者。您可以手动创建它,但我建议通过命令来完成。
php artisan make:provider SidebarServiceProvider然后在config/app.php中注册您的服务提供者
您的服务提供者,您将在那里找到boot方法,您必须调用view::composer将数据传递到视图中。
public function boot()
{
View::composer('incl.sidebar', SidebarComposer::class);
}https://stackoverflow.com/questions/57343376
复制相似问题