使用 Controller

當 Route 收到某個網址時,它會找到對應的 Controller,把任務交給它去處理。Controller 可以決定要取得什麼資料,並回傳什麼 View。

1.建立 HomeController

首先,在 app/controllers 目錄下新增一個 HomeController.php。在這個目錄下會有一個 Controller 的基礎類別 BaseController.php ,我們建立的 HomeController.php 必須繼承這個類別,程式碼如下:

<?php

class HomeController extends BaseController {

    public function index()
    {
        return View::make('home')
            ->with('title', '首頁')
            ->with('hello', '大家好~~');
    }

}

在這個類別中,我們建立了一個 index() 方法,並把原本在 route 中的內容移動到這裡。現在由 HomeController 來回傳 view。

2.修改 route。

Route::get('/', 'HomeController@index');

原本的 route 變成只有一行了,非常簡潔。第二個參數從原本的匿名函式換成 Controller 的名稱 @ 方法名稱。

現在的整個流程是:

Route -> Controller -> View

這只是 Controller 的基本功能,較複雜功能後面再說明。現在重新整理網頁,會看到一樣的內容,但是現在的運作流程已經改變了。

查詢參數

Laravel 有用到 rewrite_module,所以網址不會出現 index.php 這種帶副檔名的結尾。當在網址中帶參數時,原本的

http://www.aaa.com.tw/post.php?id=1234

這種格式,會被轉換成

http://www.aaa.com.tw/post/1234

既簡短又好看。在 Route 中就可以這樣設定。

例如,我們會以 id 去查詢資料庫中的資料然後顯示。因為我們還沒有說明資料庫的部份,所以這裡的介紹會以假資料來代替。

1.首先在原本的 Route 下新增一行新的 Route

Route::get('post/{id}', 'HomeController@show');

'post/{id}' 中的 post 是網址的一部份,後面的 {id} 表示為參數。動作的部份指定為新的方法 @show。

2.在 HomeController 中新增相對應的方法 show()

public function show($id)
{
    return View::make('home')
            ->with('title', '首頁')
            ->with('hello', '大家好~~'.$id);
}

因為 show() 方法要處理的 URI 有輸入參數,所以必須加入參數名稱 $id。這裡我們簡單的把它串接在 hello 字串後面。

現在在網址中輸入

http://localhost:8000/post/123

就會顯示

大家好~~123

記得最後面不能有斜線。後面接的 123 就是變數 $id 的值,輸入任何值,controller 就會收到這個值,在實際案例中,這時候就可以去資料庫中查詢資料,最後在附加在 View 中回傳。

Last updated