如何在公共布局文件中从db获取和显示数据,并在laravel 5.2

时间:2016-02-21 18:55:04

标签: php mysql laravel layout laravel-5.2

我是laravel的新手,我正在laravel 5.2做一个研究项目。我创建了一个Web模板,各种页面并给出了它们的路由,创建了显示网页所需的相应控制器和模型。每个网页上的数据都从数据库中获取。这部分工作正常。现在,网站中的徽标和一些标题信息是在header.blade.php中硬编码的,我存储在views / includes文件夹中,它通过default.blade.php从view / layouts文件夹中调用,并在每个文件中获取数据页面为@extends('layouts.default')。我想从数据库中获取该标题数据,并且必须在所有网页上显示。

下面给出的是我的header.blade.php文件代码:

<div class="top">
    <div class="zerogrid" align="center" style="padding-bottom:2px; padding-top:2px;">
        <ul class="number f-left">
            <li class="mail"><p><a href="mailto:email-comes-from-db-here"><font color="#FFFFFF">email-number-comes-from-db-here</font></a></p></li>
            <li class="phone"><p><a href="tel:phone-number-comes-from-db-here"><font color="#FFFFFF">phone-number-comes-from-db-here</font></a></p></li>
        </ul>
        <ul class="top-social f-right" style="padding-bottom:5px;">
            <li><a href="https://facebook.com/page-name-comes-from-db-here" target="_blank"><i class="fa fa-facebook"></i></a></li>
            <li><a href="https://plus.google.com/page-name-comes-from-db-here" target="_blank"><i class="fa fa-google-plus"></i></a></li>
            <li><a href="https://twitter.com/page-name-comes-from-db-here" target="_blank"><i class="fa fa-twitter"></i></a></li>
            <li><a href="https://linkedin.com/page-name-comes-from-db-here" target="_blank"><i class="fa fa-linkedin"></i></a></li>
            <li><a href="https://youtube.com/page-name-comes-from-db-here" target="_blank"><i class="fa fa-youtube"></i></a></li>
            <li><a href="http://website-name-comes-from-db-here" target="_blank"><i class="fa fa-globe"></i></a></li>                
        </ul>
    </div>
</div>
    <div class="zerogrid">
        <center><div class="logo"><img src="{{ asset('assets/images/logo-image-name-comes-from-db-here') }}"></div></center>
    </div>
<div class="site-title">
    <div class="zerogrid">
        <div class="row">
            <h2 class="t-center">Slogan comes from db here</h2>
        </div>
    </div>
</div>

下面给出的是我的路线文件代码(routes.php):

Route::get('/', 'GuestController@home');
Route::get('aboutus', 'GuestController@aboutus');
Route::get('services', 'GuestController@services');

下面给出的是我的控制器文件代码(GuestController.php):

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
class GuestController extends Controller
{
    public function home() {
        return view('guest.home');
    }   
    public function aboutus() {
        $result=DB::table('contents')->where('menuname','aboutus')->get();
        return view('guest.aboutus')->with('data',$result);
    }
    public function services() {
        $result=DB::table('contents')->where('menuname','services')->get();
        return view('guest.services')->with('data',$result);
    }
}

用于在单个网页上显示来自db表的每个网页数据已经通过路由完成。但是为了从db到我的所有页面显示相同的头数据,我必须对路由/控制器文件进行哪些修改?请帮忙。提前谢谢......

1 个答案:

答案 0 :(得分:2)

您可以使用view ccomposer,例如:

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider
{

    public function boot()
    {

        // Using Closure based composers
        view()->composer('guest.includes.header', function ($view) {
            $headerData = \DB::table('headers')->where('...')->get();
            $view->headerData = $headerData;
        });
    }

    public function register()
    {
        //
    }
}

providers文件的config\app.php数组中添加此提供程序,header.blade.php只要加载$headerData视图,您就会获得guest.includes.header变量/ composition如此访问该变量并将其循环并打印从DB获得的数据。例如:

// guest/includes/header.blade.php
<ul>
    <li>
        <a href="{{$headerData['facebook']}}" target="_blank">
            <i class="fa fa-facebook"></i>
        </a>
    </li>

    <!-- You may add more li here-->
</ul>

此外,还可以进行如下循环:

<ul>
    @foreach($headesData as $fieldName => $fieldValue)
        {{-- $fieldName will help to determine the icons: facebook/google --}} 
        <li><a href="{{$fieldValue}}"></li>
    @endforeach
</ul>

这可能无法直接回答你的问题,因为你并没有对所有问题进行过分析,但无论如何,它会为你提供正确的方向。