亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Laravel5.4框架怎么實現一個視圖共享數據功能

發布時間:2021-04-13 17:10:39 來源:億速云 閱讀:149 作者:Leah 欄目:開發技術

這篇文章給大家介紹使用Laravel5.4框架怎么實現一個視圖共享數據功能,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

在視圖中共享數據

除了在單個視圖中傳遞指定數據之外,有時候需要在所有視圖中傳入同一數據,即我們需要在不同視圖中共享數據。要實現這一目的,需要使用視圖工廠的share方法。

全局幫助函數view和response類似,如果傳入參數,則返回Illuminate\View\View實例,不傳入參數則返回Illuminate\View\Factory實例。所以我們可以通過在服務提供者的boot方法中使用如下方式實現視圖間共享數據:

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
  /**
   * Bootstrap any application services.
   *
   * @return void
   */
  public function boot()
  {
    //視圖間共享數據
    view()->share('name','高偉');
  }
  /**
   * Register any application services.
   *
   * @return void
   */
  public function register()
  {
    //
  }
}

接下來我直接用一個空的Laravel項目做演示,我們在 routes 文件首頁(welcome.blade.php)視圖:

Route::get('/', function () {
  return view('welcome');
});

然后在視圖中輸出視圖共享數據:

<!DOCTYPE html>
<html>
  <head>
    <title>Laravel</title>
    <style>
      html, body {
        height: 100%;
      }
      body {
        margin: 0;
        padding: 0;
        width: 100%;
        display: table;
        font-weight: 100;
        font-family: 'Lato';
      }
      .container {
        text-align: center;
        display: table-cell;
        vertical-align: middle;
      }
      .content {
        text-align: center;
        display: inline-block;
      }
      .title {
        font-size: 96px;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="content">
        <div class="title">Laravel 5</div>
        <h2>hello,{{$name}}</h2>
      </div>
    </div>
  </body>
</html>

視圖Composer

上面的一種做法雖然可行,但是在別人下載項目后,共享數據是從數據庫中獲取的,執行數據遷移的時候會報錯。這時候我們就要用到視圖Composer,視圖Composer通過視圖工廠的composer方法實現。該方法的第二個回調參數支持基于控制器動作和閉包函數兩種方式。

控制器的動作方式

首先要在服務提供者中注冊視圖 Composer,我們將會使用輔助函數 view 來訪問 Illuminate\Contracts\View\Factory 的底層實現,記住,Laravel 不會包含默認的視圖 Composer 目錄,我們可以按照自己的喜好組織其路徑,例如可以創建一個 App\Http\ViewComposers 目錄:

<?php
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
/**
* 基于類的實現方式
*/
class MottoComposer
{
  /**
   * 共享數據
   * @date  2018-01-13
   * @author 高偉
   * @param View    $view [description]
   * @return [type]      [description]
   */
  public function compose(View $view)
  {
    $view->with('motto', '嘎嘎嘎,我一直在努力!');
  }
}

然后我們在 AppServiceProvider 中繼續添加共享數據:

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
  /**
   * Bootstrap any application services.
   *
   * @return void
   */
  public function boot()
  {
    view()->share('name','高偉');
    // 使用基于類的composers...第一個參數可以指定共享給那個視圖,多個視圖用數組,共享到全部視圖可以用 *
    view()->composer(
      'welcome', 'App\Http\ViewComposers\MottoComposer'
    );
  }
  /**
   * Register any application services.
   *
   * @return void
   */
  public function register()
  {
    //
  }
}

在視圖中顯示共享數據:

...
<div class="content">
 <div class="title">Laravel 5</div>
 <h2>hello,{{$name}}</h2>
 <p>{{$motto}}</p>
</div>
...

閉包實現方式

閉包的實現方式相對來說簡單很多,這里就簡單貼書代碼:

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
  /**
   * Bootstrap any application services.
   *
   * @return void
   */
  public function boot()
  {
    view()->share('name','高偉');
    // 使用基于類的composers...
    view()->composer(
      'welcome', 'App\Http\ViewComposers\MottoComposer'
    );
    // 閉包實現方式
    view()->composer('*',function($view)
    {
      $view->with('info','http://www.iwanli.me');
    });
  }
  /**
   * Register any application services.
   *
   * @return void
   */
  public function register()
  {
    //
  }
}

視圖中顯示數據:

...
<div class="content">
 <div class="title">Laravel 5</div>
 <h2>hello,{{$name}}</h2>
 <p>{{$motto}}</p>
 <p>{{$info}}</p>
</div>
...

關于使用Laravel5.4框架怎么實現一個視圖共享數據功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

克什克腾旗| 沁源县| 石柱| 前郭尔| 安泽县| 密山市| 蛟河市| 洛浦县| 泰和县| 凤凰县| 武邑县| 辽中县| 青海省| 蒙阴县| 临泽县| 伊宁县| 林西县| 延吉市| 西吉县| 广安市| 渭源县| 白朗县| 高碑店市| 亳州市| 永兴县| 那坡县| 增城市| 梅州市| 石阡县| 封开县| 庄河市| 特克斯县| 渝中区| 旌德县| 麦盖提县| 郯城县| 盘锦市| 津市市| 尼勒克县| 休宁县| 浦县|