php - 我是否必须从 Laravel 中每个 Controller 的数据库中返回 header 数据?

标签 php laravel

我是来自 PHP 核心的 Laravel 新手,我正在尝试从包含在 app.blade.php 中的 header.blade.php 中的数据库加载数据。

我必须在每个 View 中返回标题数据变量吗?我是否必须在返回 View 的每个 Controller 函数中编写相同的代码?

如果有其他方法可以实现这一目标,请告诉我。

目前,我已将数据加载到仪表板,但仅适用于仪表板。请帮帮我。

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,但仅具有特定的 ID。这可以重写为:

User::find($id)

或者根据你的情况

User::with('companies')->find($id)

此外,您可以只使用 \Auth::user()。我是一只老狗,但我想 auth()->user() 的工作原理完全相同。

所以我会将所有内容内联到您的 header 中:

<div class="dropdown-menu" aria-labelledby="triggerId">
    @foreach (\Auth::user()->companies as $company)
        <a class="dropdown-item" href="#">{{ $company->name }}</a>
    @endforeach
</div>

如果您确实需要经常使用它或者它变得更复杂,您可以使用 Google 查看 Composer

https://laravel.com/docs/8.x/views#view-composers

如果您在加载用户时始终需要公司,则可以使用 protected $with 变量默认预先加载:

https://laravel.com/docs/8.x/eloquent-relationships#eager-loading-by-default

关于php - 我是否必须从 Laravel 中每个 Controller 的数据库中返回 header 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67400025/

相关文章:

laravel - 我的 Laravel 容器中的路由没有更新

php - 如何在每个租户都有多个用户的 laravel 中拥有 Multi-Tenancy 数据库?

php $SERVER ['PATH_INFO' ] 和 apache mod_rewrite

php - NGROK 和 Laravel - 无法加载 CSS 和 JS,因为路径错误

javascript - 使用 Mix 在 Laravel 中未检测到 VueJs

javascript - 从 json 键导出一些值作为新的 json 对象

php - (1/1) AbstractProvider.php 中的 InvalidStateException(第 209 行)

PHP+MySQL 获取数据并将其放入数据库

php - 选择 ... 其中 id = 任何值。可能吗?

php - 如何打印当前设置的所有 session 变量?