婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Laravel框架實現多個視圖共享相同數據的方法詳解

Laravel框架實現多個視圖共享相同數據的方法詳解

熱門標簽:電銷機器人問門薩維品牌my 外呼系統能給企業帶來哪些好處 百度地圖標注偏差 400電話蘭州申請請 咸寧銷售電銷機器人系統 百度地圖怎樣標注圖標 廣東廣州在怎么申請400電話 開發地圖標注類網站 余姚電話機器人

本文實例講述了Laravel框架實現多個視圖共享相同數據的方法。分享給大家供大家參考,具體如下:

最近在用Laravel寫一個cms,還沒有完成,但是也遇到了許多難點,比如cms后臺每個視圖都要展示相同的導航菜單數據。

環境:

PHP 7.1
Apache 2.4
MySQL 5.7
Laravel 5.4

  • 傳統方法

假設使用傳統的方法,應該是在每個控制器中都調用數據,然后把數據都塞給視圖。

    $menu = DB::table('menu')->get();
    return view('xx',['menu'=>$menu]);
    
    
  • 稍微優化

新建一個BaseController,然后讓BaseController去獲取數據,然后在每個控制器都繼承BaseController,最后將數據塞到視圖中。

基類

class BaseController{
  protected $menu = null;//菜單數據
  public function __construct(){
    $this->getMenu();//獲取導航菜單
  }
  public function getMenu(){
    $this->menu = DB::table('menu')->get();
  }
}

A控制器

class AController extends BaseController{
  public function index(){
    return view('admin.index',['menu'=>$this->menu,'user'=>$user]);
  }
}

缺點:在每個控制器中都需要重新設置相同的模板的數據(menu)

  • 最好優化方案

使用Laravel中的View Composers來解決這個問題

1、在App\Providers下創建一個ComposerServiceProvider類

?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider {
  /**
   * Register bindings in the container.
   *
   * @return void
   */
  public function boot() {
    // 基于類的view composer
    View::composer(
      'admin.common.*', 'App\Http\ViewComposers\AdminComposer'
    );
  }
  /**
   * Register the service provider.
   *
   * @return void
   */
  public function register() {
    //
  }
}

在boot方法中定義要監聽的視圖,還可以使用通配符,這里我寫的是admin.common.*,如果admin.common.* 下的視圖被渲染的話將會調用App\Http\ViewComposers\AdminComposer@composer 方法

2、注冊ComposerServiceProvider

config/app.php文件下的providers數組中進行注冊

App\Providers\ComposerServiceProvider::class,

3、創建AdminComposer類

Laravel推薦把view composer類放在app\Http\ViewComposers目錄下,這個目錄一開始是沒有的,需要新建

?php
namespace App\Http\ViewComposers;
use App\Libs\CommonUtils;
use Illuminate\Http\Request;
use Illuminate\View\View;
class AdminComposer {
  private $data = null;//CommonUtils對象
  public function __construct(Request $request) {
    $this->data = new CommonUtils($request);//新建一個CommonUtils對象
  }
  public function compose(View $view) {
    $view->with([
      'admin' => $this->data->admin,
      'mbx' => $this->data->mbx,
      'menu' => $this->data->menu,
      'msg' => $this->data->msg
    ]);//填充數據
  }
}

在這里我在構造方法中創建了一個對象,這個對象中包含著數據

5、CommonUtils文件

?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/4/20 0020
 * Time: 19:49
 */
namespace App\Libs;
use App\Admin;
use App\Perm;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class CommonUtils {
  public $admin = null;//管理員對象
  public $menu = null;//菜單對象
  public $mbx = null;//面包屑對象
  public $msg = null;//消息對象
  /**
   * 構造函數
   */
  public function __construct(Request $request) {
    $this->init($request);
  }
  /**
   * 初始化函數
   */
  private function init(Request $request) {
    $this->getAdmin($request);
    $this->getMsg();
    $this->getMenu($request);
    $this->getMbx($request);
  }
  /**
   * 獲取管理員數據
   */
  private function getAdmin() {
    $this->admin = session('admin');
  }
  /**
   * 獲取后臺菜單數據
   */
  private function getMenu(Request $request) {
    $menu = DB::table('menu')->where('parentid', 0)->orderBy('sort')->get();
    $router = $request->getPathInfo();
    $perm = new Perm();
    $mbx = $perm->getMbx($router);
    foreach ($menu as $k => $m) {
      $m->active = '';
      //讀取子菜單
      $childMenu = DB::table('menu')->where('parentid', $m->id)->orderBy('sort')->get();
      if (count($childMenu) > 0) {
        foreach($childMenu as $v){
          $v->active = '';
          if($mbx[0]->router == $v->router){
            $v->active = 'active';
            $m->active = 'active';
          }
        }
        $m->childMenu = $childMenu;
      } else {
        $m->childMenu = null;
      }
    }
    $this->menu = $menu;
  }
  /**
   * 獲取面包屑
   */
  private function getMbx(Request $request) {
    $router = $request->getPathInfo();
    $perm = new Perm();
    $mbx = $perm->getMbx($router);
    $this->mbx = $mbx;
  }
  /**
   * 獲取未讀消息
   */
  private function getMsg() {
    $adminModel = new Admin();
    $toId = $this->admin->id;
    $this->msg = $adminModel->getUnReadMsg($toId);
  }
}

在這里面分別獲取了管理員、菜單、面包屑、消息數據,這些數據都是每個后臺頁面都要使用到的。

注意:這里我將類定義成了CommonUtils,感覺名字取得不好,CommonUtils是存放在App\Libs下的,這個Libs文件夾是我新建的,用于存放工具類的。如果需要給App\Libs文件夾添加自動加載,需要在composer.json文件里做如下修改。

更多關于Laravel相關內容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優秀開發框架總結》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家基于Laravel框架的PHP程序設計有所幫助。

您可能感興趣的文章:
  • laravel多視圖共享數據實例代碼

標簽:重慶 巴彥淖爾 麗江 銅陵 十堰 衡陽 鷹潭 臨沂

巨人網絡通訊聲明:本文標題《Laravel框架實現多個視圖共享相同數據的方法詳解》,本文關鍵詞  Laravel,框架,實現,多個,視圖,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Laravel框架實現多個視圖共享相同數據的方法詳解》相關的同類信息!
  • 本頁收集關于Laravel框架實現多個視圖共享相同數據的方法詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    玉足女爽爽91| 7878成人国产在线观看| 国内外成人在线视频| 91福利在线看| 一区二区三区四区在线播放| 国产麻豆精品久久一二三| 日韩午夜精品视频| 日韩欧美国产麻豆| 亚洲国产精品av| 视频在线观看91| 日韩精品一区二区三区在线观看| 亚洲成在人线免费| 欧美精品三级在线观看| 视频一区二区三区在线| 色婷婷综合激情| 欧美一级在线观看| 粉嫩av一区二区三区在线播放| 久久精品夜色噜噜亚洲aⅴ| 成人a级免费电影| 国产精品人成在线观看免费| 波多野结衣91| 亚洲免费观看高清在线观看| 一本色道久久综合亚洲aⅴ蜜桃 | 日本一区二区三区四区| 国产在线视视频有精品| 久久网站热最新地址| 91视频观看免费| 亚洲靠逼com| 日韩三级精品电影久久久| 国产黑丝在线一区二区三区| 一卡二卡欧美日韩| 日韩成人一区二区三区在线观看| 日韩中文字幕av电影| 天天av天天翘天天综合网| 欧美一区二区三区在线电影| 极品少妇xxxx精品少妇| 亚洲国产三级在线| 亚洲免费在线观看| 亚洲日本青草视频在线怡红院 | 久久久99免费| 国产精品一区二区男女羞羞无遮挡| 国产成人福利片| 国产电影精品久久禁18| 久久99国产精品成人| 美国精品在线观看| 日本欧美在线看| 卡一卡二国产精品| 国产精品一区专区| 91欧美一区二区| 色噜噜狠狠色综合中国| 欧美精品一级二级| 欧美大胆人体bbbb| 亚洲综合小说图片| 美女诱惑一区二区| 不卡的电影网站| 欧美精品tushy高清| 欧美狂野另类xxxxoooo| 中文字幕乱码日本亚洲一区二区 | 国产精品久久久久一区二区三区共| 国产欧美日韩激情| 亚洲精品一二三四区| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲精品视频在线看| 激情综合五月天| 欧美三区免费完整视频在线观看| 久久影院视频免费| 偷拍日韩校园综合在线| 99久久久久久| 国产精品久久综合| av亚洲精华国产精华| 欧美韩国日本一区| 日韩精品乱码免费| 欧美日韩在线免费视频| 久久综合狠狠综合久久综合88| **网站欧美大片在线观看| 精品夜夜嗨av一区二区三区| 色呦呦国产精品| 午夜精品免费在线| 欧美一级片在线看| 国产在线一区二区综合免费视频| 欧美高清你懂得| 日韩高清不卡在线| 日韩美女在线视频| 丝瓜av网站精品一区二区| 97久久超碰精品国产| 亚洲国产成人私人影院tom | 日韩欧美不卡一区| 美腿丝袜亚洲综合| 91精品国产一区二区三区| 成人一区在线看| 欧美日韩专区在线| 91丝袜美女网| 亚洲黄色录像片| 日本精品一区二区三区四区的功能| 国产精品国产自产拍高清av王其| av电影在线观看一区| 中文字幕在线观看一区| 日韩一二三区不卡| 亚洲高清不卡在线| 精品美女在线播放| 欧美性生活一区| 国产精品1区二区.| 日韩精品一区国产麻豆| 欧美天天综合网| 国产精品美女久久久久av爽李琼| 欧美三级欧美一级| 色婷婷久久久亚洲一区二区三区| 香蕉久久夜色精品国产使用方法| 国产精品色噜噜| 国产精品夫妻自拍| 国产亚洲欧美色| 精品久久久久久久久久久久久久久久久| 99久久婷婷国产综合精品| 国产一区二区三区国产| 免费观看成人av| 精品无人区卡一卡二卡三乱码免费卡 | 日韩电影免费在线| 午夜亚洲国产au精品一区二区| 尤物视频一区二区| 国产精品欧美一区二区三区| 日韩精品一区二区三区蜜臀 | 丁香天五香天堂综合| 国产一区二区精品久久99| 国产成人免费9x9x人网站视频| av网站一区二区三区| 色婷婷综合久久久久中文| 欧美一级片在线看| 欧美激情在线一区二区三区| 亚洲欧美一区二区三区孕妇| 亚洲日本在线视频观看| 日本亚洲欧美天堂免费| 99久久精品国产网站| 91麻豆精品久久久久蜜臀| 欧美激情在线一区二区| 全部av―极品视觉盛宴亚洲| av一区二区三区在线| 欧美经典一区二区| 国产精品美女一区二区在线观看| 欧美大片国产精品| 中文字幕一区免费在线观看 | 久久亚洲精品小早川怜子| 亚洲人成网站影音先锋播放| 久久99这里只有精品| 精品视频一区二区三区免费| 国产日韩综合av| 国内精品国产成人国产三级粉色 | 精品成人私密视频| 蜜臂av日日欢夜夜爽一区| 精品伦理精品一区| 自拍偷拍亚洲综合| 国产91精品一区二区麻豆亚洲| 精品视频1区2区| 欧美精品一区二区在线播放| 日韩午夜在线影院| 国产精品亚洲一区二区三区妖精 | 欧美国产成人在线| 亚洲欧洲av在线| 国产精品国产a| 国产精品全国免费观看高清 | 欧美日韩在线播| 久久久久久久综合色一本| 7777精品伊人久久久大香线蕉经典版下载| 欧美在线免费视屏| 一区二区三区四区视频精品免费 | 欧美日韩国产美女| 亚洲精品国久久99热| 欧美精品黑人性xxxx| 亚洲综合区在线| 久久综合久久综合亚洲| 欧美电影免费观看完整版| 久久久不卡网国产精品二区| 国产高清在线精品| 久久综合色8888| caoporn国产精品| 欧美激情综合网| 欧美一区二区三区喷汁尤物| 蜜桃在线一区二区三区| 欧美日韩国产一级| 韩国一区二区在线观看| 亚洲国产一二三| 97精品国产露脸对白| 亚洲黄色av一区| 日韩免费看网站| 成人高清免费在线播放| 午夜婷婷国产麻豆精品| 欧美激情在线看| 欧美体内she精高潮| 99免费精品在线观看| 美女视频黄免费的久久| 欧美一区二区三区视频免费播放 | 欧美午夜精品一区二区蜜桃| 成人免费在线播放视频| 久久五月婷婷丁香社区| 欧美变态口味重另类| 欧美三级在线看| 国产91对白在线观看九色| 狠狠色综合播放一区二区| 久久99国产精品免费| 蜜臀精品久久久久久蜜臀 | 99re视频这里只有精品|