为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
蝴蝶刀刀 2021-11-13 10:33:13
我有一个显示在每个页面中的部分页面“侧边栏”。我的标志是动态的。为了显示我的徽标,我通过仪表板控制器发送了变量,但它显示未定义的变量。问题似乎在路由中,因为“/dashboard”被称为不是“侧边栏”对于侧边栏,我已经在仪表板控制器中编写了它的一部分 那么,我怎样才能做到这一点?未定义变量:logos(查看: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);}边栏.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>应用程序.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>
查看完整描述

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上的这篇文章

希望能帮助到你。


查看完整回答
反对 回复 2021-11-13
?
jeck猫

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 中调用该函数


查看完整回答
反对 回复 2021-11-13
?
噜噜哒

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);

}


查看完整回答
反对 回复 2021-11-13
  • 3 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信