首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将动态变量发送到部分页面“侧栏”?

如何将动态变量发送到部分页面“侧栏”?
EN

Stack Overflow用户
提问于 2019-08-04 02:36:00
回答 3查看 2.4K关注 0票数 2

我有一个部分页面“侧边栏”,显示在每一页。在那里我的标志是动态的。为了显示我的徽标,我已经通过仪表板控制器发送变量,但是它显示的是未定义的变量。问题似乎正在发生,因为"/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) ))

仪表板控制器

代码语言:javascript
复制
public function sidebar()
{
    $data['logos'] = Setting::first();

    return view('admin.layouts.app', $data);
}

Sidebar.blade.php

代码语言:javascript
复制
<!-- 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

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-04 03:08:02

侧栏调用每个刀片文件,因此您应该为此调用助手函数。更改composer.json文件:

代码语言:javascript
复制
"autoload": {
    "files": [
        "app/helpers.php"
    ],
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},

运行:

代码语言:javascript
复制
composer dump-autoload

在应用程序文件夹中创建helpers.php文件。

并在helpers.php中编写您的函数。

代码语言:javascript
复制
function sidebar()
{
    $data['logos'] = Setting::first();

    return $data;
}

并在sidebar.php中调用该函数。

票数 1
EN

Stack Overflow用户

发布于 2019-08-04 04:25:43

传递给admin.layouts.appadmin.layouts.appsidebar中不存在

当您从视图中@include视图时,框架正在编译一个新视图,而传递给第一个视图的$data不会持久化到新视图,这称为shared view

对于您的问题,有几种解决方案,从最快到最好:

1)直接将其传递给共享视图

代码语言:javascript
复制
@include('admin.partials.sidebar.sidebar', ['logos' => $logos])

这将“共享”shared view所需的数据。不用说,这不是最好的解决办法。

2) ->share()方法

在您的控制器中,执行以下操作:

代码语言:javascript
复制
view()->share('logos', Setting::first());

这将在所有视图(包括共享视图)中创建$logos变量。可能将呼叫放置在服务提供商中,这样您就不会有重复的代码。

3)视图作曲家

这是一个非常好的解决方案,如果您对它感兴趣,请阅读这篇关于视图作曲家的文章

希望能帮上忙。

票数 2
EN

Stack Overflow用户

发布于 2021-01-26 18:14:16

您可以使用提供者和作曲家来实现您的目标。

第一步

首先,在App\Http\View\composers目录中创建一个Composer类,如果您已经没有这个目录,可以创建一个

在那里创建一个文件SidebarComposer,您必须将数据分配给compose方法。下面我共享一个完整的编写器代码

代码语言:javascript
复制
<?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获取数据,但您可以调用任何您喜欢的controllerrepository

第二步:

创建一个服务提供者。您可以手动创建它,但我建议通过命令来完成。

代码语言:javascript
复制
php artisan make:provider SidebarServiceProvider

然后在config/app.php中注册您的服务提供者

您的服务提供者,您将在那里找到boot方法,您必须调用view::composer将数据传递到视图中。

代码语言:javascript
复制
public function boot()
{
    View::composer('incl.sidebar', SidebarComposer::class);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57343376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档