如何在通用布局文件中从数据库中获取和显示数据,并显示在 laravel 5.2 中的所有视图上
How to fetch and display data from db inside a common layout file and to display on all views in laravel 5.2
我是 laravel 的新手,我在 laravel 5.2 做一个学习项目。我已经创建了一个网页模板,各种页面并给出了它们的路径,创建了显示网页所需的相应控制器和模型。每个网页上的数据都是从数据库中获取的。到目前为止,它工作正常。现在网站上的徽标和一些 header 信息在 header.blade.php 中 hard-coded,我存储在 views/includes 文件夹中,它是从 view/layouts 文件夹中调用的default.blade.php 并在每个页面上获取数据作为 @extends('layouts.default')。我也想从数据库中获取 header 数据,它必须显示在所有网页上。
下面给出的是我的 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 table 的每个网页数据已经通过路由完成。但是要从 db 向我的所有页面显示相同的 header 数据,我必须对 routes/controller 文件进行哪些修改?请帮忙。提前致谢...
您可以使用 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()
{
//
}
}
将此提供程序添加到 config\app.php
文件的 providers
数组中,在 header.blade.php
中,每当 guest.includes.header
视图时,您将获得一个 $headerData
变量是 loaded/composed 所以访问该变量并循环它并打印你从 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>
这可能无法直接回答您的问题,因为您没有完全澄清,但无论如何,它会给您正确的方向。
我是 laravel 的新手,我在 laravel 5.2 做一个学习项目。我已经创建了一个网页模板,各种页面并给出了它们的路径,创建了显示网页所需的相应控制器和模型。每个网页上的数据都是从数据库中获取的。到目前为止,它工作正常。现在网站上的徽标和一些 header 信息在 header.blade.php 中 hard-coded,我存储在 views/includes 文件夹中,它是从 view/layouts 文件夹中调用的default.blade.php 并在每个页面上获取数据作为 @extends('layouts.default')。我也想从数据库中获取 header 数据,它必须显示在所有网页上。
下面给出的是我的 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 table 的每个网页数据已经通过路由完成。但是要从 db 向我的所有页面显示相同的 header 数据,我必须对 routes/controller 文件进行哪些修改?请帮忙。提前致谢...
您可以使用 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()
{
//
}
}
将此提供程序添加到 config\app.php
文件的 providers
数组中,在 header.blade.php
中,每当 guest.includes.header
视图时,您将获得一个 $headerData
变量是 loaded/composed 所以访问该变量并循环它并打印你从 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>
这可能无法直接回答您的问题,因为您没有完全澄清,但无论如何,它会给您正确的方向。