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

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


蝴蝶刀刀
浏览 133回答 3
3回答

慕仙森

在$data你传递给admin.layouts.app在不存在sidebar当您@include从视图中创建视图时,框架正在编译一个新视图,而$data您传递给第一个view视图的视图不会持久保存到新视图中,这称为shared view.您的问题有几种解决方案,从最快到最好:1) 直接将其传递给共享视图@include('admin.partials.sidebar.sidebar',&nbsp;['logos'&nbsp;=>&nbsp;$logos])这将“共享”所需的数据shared view。不用说,这不是最好的解决方案。2)->share()方法在您的控制器中,执行以下操作:view()->share('logos',&nbsp;Setting::first());这将$logos在所有视图中创建变量,包括共享视图。将呼叫置于服务提供商内部,您将不会有重复的代码。3) 查看作曲家这是一个非常好的解决方案,如果您对此感兴趣,请阅读View Composers上的这篇文章希望能帮助到你。

jeck猫

Sidebar 在每个刀片文件中调用,所以你应该为它调用辅助函数。更改您的composer.json文件:"autoload": {&nbsp; &nbsp; "files": [&nbsp; &nbsp; &nbsp; &nbsp; "app/helpers.php"&nbsp; &nbsp; ],&nbsp; &nbsp; "classmap": [&nbsp; &nbsp; &nbsp; &nbsp; "database/seeds",&nbsp; &nbsp; &nbsp; &nbsp; "database/factories"&nbsp; &nbsp; ],&nbsp; &nbsp; "psr-4": {&nbsp; &nbsp; &nbsp; &nbsp; "App\\": "app/"&nbsp; &nbsp; }},跑:composer dump-autoload在您的应用程序文件夹中创建helpers.php文件。并在helpers.php 中编写您的函数。function sidebar(){&nbsp; &nbsp; $data['logos'] = Setting::first();&nbsp; &nbsp; return $data;}并在sidebar.php 中调用该函数

噜噜哒

您可以使用 Provider 和 Composer 来实现您的目标步骤1首先在App\Http\View\composers目录下创建一个 Composer 类如果你已经没有这个目录你可以创建一个在那里创建一个文件SidebarComposer在那里您必须将数据分配给compose方法。下面我分享一个完整的作曲家代码<?phpnamespace App\Http\View\composers;use Illuminate\View\View;use App\Models\SideMenu;class SidebarComposer{&nbsp; &nbsp; protected $sidemenuItems;&nbsp; &nbsp; public function __construct(SideMenu $SideMenu)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $this->sidemenuItems = $SideMenu::getAll();&nbsp; &nbsp; }&nbsp; &nbsp; public function compose(View $view)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $view->with('menuItems', $this->sidemenuItems);&nbsp; &nbsp; }}我在这里打电话是Model为了获取数据,但你可以调用任何你喜欢的controller或repository第二步:创建服务提供者。您可以手动创建它,但我建议通过命令来创建它php artisan make:provider SidebarServiceProvider然后注册您的服务提供商 config/app.php您的服务提供商,您会在boot那里找到方法,您必须调用view::composer该方法将您的数据传递到您的视图中public function boot(){&nbsp; &nbsp; View::composer('incl.sidebar', SidebarComposer::class);}
打开App,查看更多内容
随时随地看视频慕课网APP