[Laravel] Controllers

一直我都以為 routes 就是 Laravel 的 controller 看來是我誤會
routes就是一個路由,現在要真的來使用controller了


直接進入主題
使用 php artisan 來建立 controller檔案
php artisan make:controller {controller_name}
然後我們就會看到我們的 controller
\helloLaravel\app\Http\Controllers\controller_name.php

加入以下程式碼

<?php
namespace App\Http\Controllers;

use App\Task;

class TasksController extends Controller{
    public function index()
    {
        $tasks = Task::all();
        return view('tasks.index')
            ->with('tasks', $tasks);
    }

    public function show($id)
    {
        $task = Task::find($id);
        return view('tasks.show', compact('task'));
    }
}

可以看到我們把原先寫在 routes 中呼叫 model 的方法分離成function
如此讓 routes 工作更單純
開頭引入了 App\Task 的命名空間
所以後面可以直接調用 Task 內的函數

因為分離的關係,我們可以把 routs精簡化
Route::get('/tasks', 'TasksController@index');

Route::get('/tasks/{task}', 'TasksController@show');

只剩下兩行,剩下的部分都被導向 controller 來處裡
上就是 controller 的初步介紹



看到一個很特別的用法:
Route Model Binding

Routes 設定中
Route::get('/tasks/{task}', 'TasksController@show');

會把 task 作為 get 傳送到 controller
而 controller 改為
public function show(Task $task) //Task::find($id);{
    return view('tasks.show', compact('task'));
}

可以看到 function 的參數改變,Route Model Binding 預設是搜尋鍵值
這邊的範例也是使用鍵值

留言