Laravel - The Basics - Views (官方文件原子化翻譯筆記)

# 前言

學習一個框架, Ray 的想法是, 在深入理解底層實作的原理之前, 應該先知道這個框架的 使用方法; 先學習怎麼使用這個前人造的輪子, 再學習怎麼樣一個輪子。
所以本篇文章重點在於細讀官方文件, 並將內容理解後以 Q&A 的方式記錄下來, 加速學習以及查詢。



# Creating & Rendering Views

以下的 Laravel example code 的意思是?
  • Example:
    <?php
    Route::get('/', function () {
    return view('greeting', ['name' => 'James']);
    });
  • Answer:
    return 定義好的 view, 定義於 resources/views 資料夾下, 帶著 variable $name = 'James'
以下的 Laravel example code 的意思是?
  • Example:
    <?php
    use Illuminate\Support\Facades\View;

    return View::make('greeting', ['name' => 'James']);
  • Answer:
    使用 View facade, return 定義好的 view, 定義於 resources/views 資料夾下, 帶著 variable $name = 'James'

# Nested View Directories

以下的 Laravel example code 的意思是?
  • Example:
    <?php
    return view('admin.profile', $data);
  • Answer:
    return view, view 的 location 為 /resources/views/admin/profile, 並帶著 $data 過去, $data 為一個 array

# Creating The First Available View

以下的 Laravel example code 的意思是?
  • Example:
    <?php
    use Illuminate\Support\Facades\View;

    return View::first(['custom.admin', 'admin'], $data);
  • Answer:
    return first() 的 arg1 array 中的 first existing view, 並帶入 $data

# Determining If A View Exists

以下的 Laravel example code 的意思是?
  • Example:
    <?php
    use Illuminate\Support\Facades\View;

    if (View::exists('emails.customer')) {
    //
    }
  • Answer:
    判斷 resources/views/emails/customer view 是否存在


# Passing Data To Views

以下的 Laravel example code 的意思是?
  • Example:
    <?php
    return view('greetings', ['name' => 'Victoria']);

    // on view page
    <?php echo $name; ?>
  • Answer:
    $name = 'Victoria' 傳到 view, 所以在 view page 可以 access $name
以下的 Laravel example code 的意思是?
  • Example:
    <?php
    return view('greeting')
    ->with('name', 'Victoria')
    ->with('occupation', 'Astronaut');
  • Answer:
    $name = 'Victoria', $occupation = 'Astronaut' pass 給 view, 所以在 view page 可以存取 $name, $occupation

# Sharing Data With All Views

以下的 Laravel example code 的意思是?
  • Example:
    <?php

    namespace App\Providers;

    use Illuminate\Support\Facades\View;

    class AppServiceProvider extends ServiceProvider
    {
    public function register()
    {
    //
    }

    public function boot()
    {
    View::share('key', 'value');
    }
    }
  • Answer:
    AppServiceProvider 的 boot(), 使用 View::share(), 可以將註冊的 data share 到所有的 views, 註冊後所有的 views 都可以存取 key


# View Composers

以下的 Laravel example code 的意思是?
  • Example:
    <?php
    // 在自己建立的 ViewServiceProvider

    namespace App\Providers;

    use App\Http\View\Composers\ProfileComposer;
    use Illuminate\Support\Facades\View;
    use Illuminate\Support\ServiceProvider;

    class ViewServiceProvider extends ServiceProvider
    {
    public function register()
    {
    //
    }

    public function boot()
    {
    View::composer('profile', ProfileComposer::class);

    View::composer('dashboard', function ($view) {
    //
    });
    }
    }

    // ProfileComposer

    namespace App\Http\View\Composers;

    use App\Repositories\UserRepository;
    use Illuminate\View\View;

    class ProfileComposer
    {
    protected $users;

    public function __construct(UserRepository $users)
    {
    // Dependencies automatically resolved by service container...
    $this->users = $users;
    }

    public function compose(View $view)
    {
    $view->with('count', $this->users->count());
    }
    }
  • Answer:
    在自己建立的 ViewServiceProvider 的 boot() 針對特定的 view 註冊 view composer, 並且定義 view composer, 該 view page 在 render 時會執行 view composer, 在此 example 中, profile view page 在 render 時會執行 ProfileComposer, 因此 profile view page render 後可在該頁面存取 $count = $users->count() 資料
    建立 ViewServiceProvider 後, 需要到 config/app.php, 加 ViewServiceProvider 加到 providers array

# Attaching A Composer To Multiple Views

以下的 Laravel example code 的意思是?
  • Example:
    <?php
    use App\Http\Views\Composers\MultiComposer;

    View::composer(
    ['profile', 'dashboard'],
    MultiComposer::class
    );
  • Answer:
    可以將 view composer 附加到多個 view 上
以下的 Laravel example code 的意思是?
  • Example:
    <?php
    View::composer('*', function ($view) {
    //
    });
  • Answer:
    可將 view composer 附加到所有的 view 上

# View Creators

以下的 Laravel example code 的意思是?
  • Example:
    <?php
    use App\Http\View\Creators\ProfileCreator;
    use Illuminate\Support\Facades\View;

    View::creator('profile', ProfileCreator::class);
  • Answer:
    註冊 view creator, 效果跟 view composer 差不多, 差別在於 creator 在 instantiate 時就執行, composer 會在 render 時才執行, 具體的差別在於, 當使用 creator 時, 可在 controller overwrite creator 定義的 variable, 而 composer 則不行


# Optimizing Views

以下的 Laravel example code 的意思是?
  • Example:
    <?php
    php artisan view:cache
    php artisan view:clear
  • Answer:
    Laravel 在每次 request 都會檢查並 compile blade view, 這對效能會有負面影響, 可將之 cache 住以避免每次都 compile, 當然, 若是修改了 code 之後, 也要 clear 並重新 cache
Laravel - The Basics - Responses (官方文件原子化翻譯) kubernetes - Secrets

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×