3 回答
TA贡献1827条经验 获得超8个赞
在$data
你传递给admin.layouts.app
在不存在sidebar
当您@include
从视图中创建视图时,框架正在编译一个新视图,而$data
您传递给第一个view
视图的视图不会持久保存到新视图中,这称为shared view
.
您的问题有几种解决方案,从最快到最好:
1) 直接将其传递给共享视图
@include('admin.partials.sidebar.sidebar', ['logos' => $logos])
这将“共享”所需的数据shared view
。不用说,这不是最好的解决方案。
2)->share()
方法
在您的控制器中,执行以下操作:
view()->share('logos', Setting::first());
这将$logos
在所有视图中创建变量,包括共享视图。将呼叫置于服务提供商内部,您将不会有重复的代码。
3) 查看作曲家
这是一个非常好的解决方案,如果您对此感兴趣,请阅读View Composers上的这篇文章
希望能帮助到你。
TA贡献1909条经验 获得超7个赞
Sidebar 在每个刀片文件中调用,所以你应该为它调用辅助函数。更改您的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 中调用该函数
TA贡献1784条经验 获得超7个赞
您可以使用 Provider 和 Composer 来实现您的目标
步骤1
首先在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);
}
- 3 回答
- 0 关注
- 132 浏览
添加回答
举报