php - 我是否必须从 laravel 中每个控制器的数据库中返回标头数据?
问题描述
我是来自 PHP 核心的 Laravel 新手,我正在尝试从 app.blade.php 中包含的 header.blade.php 中的数据库加载数据。
我是否必须在每个视图中返回标头数据变量?我是否必须在每个返回视图的控制器函数中编写相同的代码?
如果有其他方法可以实现,请告诉我。
目前,我已将数据加载到我的仪表板,但它仅适用于仪表板。请帮帮我。
class DashboardController extends Controller
{
function index()
{
$users = User::with('companies')
->where('id' , auth()->user()->id)
->get();
return view('dashboard')
->with('users',$users);
}
}
这是 header.blade.php
<nav class="navbar navbar-expand-md navbar-dark bg-dark shadow-sm clear-fix">
<div class="container-fluid">
@guest
<a class="navbar-brand" href="{{ url('/') }}">
{{ config('app.name', '') }}
</a>
@endguest
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<!-- Left Side Of Navbar -->
@auth
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<div class="dropdown open">
<button class="btn btn-secondary dropdown-toggle" type="button" id="triggerId"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Companies
</button>
<div class="dropdown-menu" aria-labelledby="triggerId">
@foreach ($users as $user)
@foreach ($user->copmanies as $company)
<a class="dropdown-item" href="#">{{ $company->name }}</a>
@endforeach
@endforeach
</div>
</div>
</li>
<li class="nav-item active">
<a class="nav-link" href="{{ route('dashboard') }}">Dashboard <span
class="sr-only">(current)</span></a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Business
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="#">Short-term cash-flow</a>
<a class="dropdown-item" href="#">Business snapshot</a>
<hr>
<a class="dropdown-item" href="{{ route('invoices.view', '1') }}">Invoices</a>
<a class="dropdown-item" href="{{ route('quotes.view', '1') }}">Quotes</a>
<a class="dropdown-item" href="{{ route('sales_overview', '1') }}">Sales Overview</a>
<hr>
<a class="dropdown-item" href="{{ route('bills.view', '1') }}">Bills</a>
<a class="dropdown-item" href="{{ route('purchaseorders.view', '1') }}">Purchase Orders</a>
<a class="dropdown-item" href="{{ route('purchases_overview', '1') }}">Purchase Overview</a>
<hr>
<a class="dropdown-item" href="#">Expense claim</a>
<a class="dropdown-item" href="#">Products and srevices</a>
<a class="dropdown-item" href="#">Pay run</a>
<a class="dropdown-item" href="#">Cheques</a>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Accouting
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="#">Bank Account</a>
<a class="dropdown-item" href="#">Reports</a>
<a class="dropdown-item" href="#">Advance</a>
<hr>
<p><i class="fas fa-star"></i> Reports</p>
<a class="dropdown-item" href="#">Accounts Transactions</a>
<a class="dropdown-item" href="#">Aged Payable Summary</a>
<a class="dropdown-item" href="#">Aged Reciveable Summary</a>
<a class="dropdown-item" href="#">Balance Sheet</a>
<a class="dropdown-item" href="#">Profit And Loss</a>
<a class="dropdown-item" href="#">Sales Tax Report</a>
<hr>
<p><i class="fas fa-star"></i> Advance</p>
<a class="dropdown-item" href="#">Chart of accounts</a>
<a class="dropdown-item" href="#">Find and record</a>
<a class="dropdown-item" href="#">Fixed assets</a>
<a class="dropdown-item" href="#">Manual journals</a>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Projects
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="#">All Projects</a>
<a class="dropdown-item" href="#">Time entries</a>
<a class="dropdown-item" href="#">Staff Time Overview</a>
<a class="dropdown-item" href="#">Staff Cost Rate</a>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Contacts
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="#">All Contacts</a>
<a class="dropdown-item" href="#">Customers</a>
<a class="dropdown-item" href="#">Suppliers</a>
<a class="dropdown-item" href="#">Employees</a>
<hr>
<a class="dropdown-item" href="#">Traning Customers</a>
</div>
</li>
</ul>
@endauth
<!-- Right Side Of Navbar -->
<ul class="navbar-nav ml-auto">
<!-- Authentication Links -->
@guest
@if (Route::has('login'))
<li class="nav-item">
<a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
</li>
@endif
@if (Route::has('register'))
<li class="nav-item">
<a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
</li>
@endif
@else
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
<i class="fas fa-plus"></i>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="{{ route('invoices.new', '1') }}">Invoice</a>
<a class="dropdown-item" href="{{ route('invoices.new_repeating', '1') }}">Repeating
Invoice</a>
<a class="dropdown-item" href="{{ route('quotes.new', '1') }}">Qoute</a>
<a class="dropdown-item" href="{{ route('creditnotes.new', '1') }}">Credit Note</a>
<a class="dropdown-item" href="{{ route('bills.new', '1') }}">Bill</a>
<a class="dropdown-item" href="{{ route('purchaseorders.new', '1') }}">Purchase Order</a>
<a class="dropdown-item" href="#">Expense</a>
<a class="dropdown-item" href="#">Manual Journal</a>
<a class="dropdown-item" href="#">Spend Money</a>
<a class="dropdown-item" href="#">Recive Money</a>
<a class="dropdown-item" href="#">Transfer Money</a>
<a class="dropdown-item" href="#">Contact</a>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
<i class="fa fa-search" aria-hidden="true"></i>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
<i class="fa fa-bell" aria-hidden="true"></i>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->name }}
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('logout') }}" onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
@csrf
</form>
</div>
</li>
@endguest
</ul>
</div>
</div>
解决方案
我经常只是为小型项目内联这些东西。
您的查询也有点偏离。你得到所有User
的 s 但只有一个特定的 ID。这可以重写为:
User::find($id)
或者在你的情况下
User::with('companies')->find($id)
此外,您可以只使用\Auth::user()
. 我是一只老狗,但我想它auth()->user()
的工作原理完全一样。
所以我会在你的标题中内联所有这些:
<div class="dropdown-menu" aria-labelledby="triggerId">
@foreach (\Auth::user()->companies as $company)
<a class="dropdown-item" href="#">{{ $company->name }}</a>
@endforeach
</div>
如果你真的需要大量使用它或者它变得更复杂,你可以谷歌查看作曲家
https://laravel.com/docs/8.x/views#view-composers
如果您在加载用户时也总是需要公司,则可以默认使用受保护的$with
变量进行预加载:
https://laravel.com/docs/8.x/eloquent-relationships#eager-loading-by-default