Laravel 學習筆記(6) - View

View

前面的 Route 只傳回了一行文字,接下來我們要傳回一個 view。
這裡要認識:
  • View 類別
  • Blade 樣板系統
首先,我們會先使用 Blade 來建立 view,接著使用 View 類別建立成可讓瀏覽器顯示的 HTML 並回傳。

1.建立 view

在 app/views 目錄下,建立一個 home.blade.php 檔案。

!注意,要使用 Blade,檔案名稱必須命名為 xxx.blade.php,xxx 是自訂的名稱,後面的 .blade.php 表示這是一個 blade 樣板。

在 home.blade.php 中的內容:
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Home</title>
</head>
<body>
    Hello Laravel ~~
</body>
</html>
一個簡單的 HTML 碼,將原本在 route 中的文字移到 body 中。

2.在 route 中傳回這個 view

在 app/routes.php 檔中,將原本的 route 換成
Route::get('/', function()
{
    return View::make('home');
});
View 類別的 make 方法,需要傳入一個 Blade 檔,這裡就是步驟 1 所建立的 home.blade.php,只要給它名稱即可。

3.傳遞資料

現在我們要在 route 中將資料傳給 view。修改 route 中的程式碼如下:
return View::make('home')
        ->with('title', '首頁')
        ->with('hello', '大家好~~');
with 的第一個參數代表 php 的變數名稱,第二個參數代表這個變數的值。你可以透過 with 串接多個變數。

接下來要在樣板顯示這些變數的值,修改 home.blade.php 如下:
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ $title }}</title>
</head>
<body>
    {{ $hello }}
</body>
</html>
在 blade 中,要顯示變數的值,可以用 {{}} 來包圍,在其中放 php 變數。
{{ $title }}

它會被轉譯成
<?php echo $title; ?>
Blade 功能非常強大,這裡只先介紹幾個簡單的功能。

有時候可能會因為沒有傳遞變數給 blade 而造成找不到變數的錯誤,可以這樣避免:
{{ isset($name) ? $name : 'Default' }}
它是一個三元運算子的結構,blade 也提供一個更簡便的寫法,功能一樣:
{{ $name or 'Default' }}
利用 or 後面加預設值的方式,來避免找不到變數時發生錯誤。

有兩種顯示變數的方式 {{ ... }}{{{ ... }}},差別在兩個大括號,會轉換 html 碼,而三個大括號不會做任何轉換。

例如:
->with('hello', '<h1>大家好~~</h1>');
{{ $hello }} 中會以 h1 的型式表現。而在 {{{ $hello }}} 中,會顯示為
<h1>大家好~~</h1>
本文網址:http://blog.tonycube.com/2014/12/laravel-6-view.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

4 則留言

  1. 你好!
    view這個資料夾應該是在resources裡面,
    是否您打錯了呢?

    回覆刪除
    回覆
    1. 我的學習筆記是4.2版的(https://laravel.com/docs/4.2/responses)
      還沒時間看5.x的,我查了一下 5.2版文件(https://laravel.com/docs/5.2/views)
      是在 resources 裡沒錯。

      刪除
  2. 請問用Controller RETURN VIEW('MAIN');
    MAIN是在RESOURCES/VIEWS/MAIN.blade.php
    網站會出現ERROR
    但當我把MAIN.blade.php改成MAIN.php
    網站就沒問題了
    請問我該如何解決?
    請盡快回覆謝謝!!

    回覆刪除
    回覆
    1. 把 debug 打開看看有什麼錯誤訊息,
      另外,你是用 return View::make('main') 嗎?
      main.blade.php 才是對的樣板,錯誤不是在名稱,
      看一下你的樣板內容是不是有錯,
      或是 controller 呼叫有錯,例如沒有傳值給 view。

      刪除

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。