> For the complete documentation index, see [llms.txt](https://tony915.gitbook.io/laravel-4-2/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tony915.gitbook.io/laravel-4-2/begining/controller.md).

# 使用 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 中回傳。
