iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0

今天要開始進行controller編程

簡介

除了在單一的 routes.php 檔案中定義所有的請求處理邏輯,還可以使用控制器類別來組織此行為。控制器可將相關的 HTTP 請求處理邏輯組成一個類別。控制器一般存放在 app/Http/Controllers 目錄下。

基礎控制器

這是控制器類別的範例。所有 Laravel 控制器都應繼承基礎控制器類別,它包含在 Laravel 的預設安裝中:

<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * 顯示給定使用者的個人資料。
     *
     * @param  int  $id
     * @return Response
     */
    public function showProfile($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

我們可以經由路由指定控制器行為,就像這樣:

Route::get('user/{id}', 'UserController@showProfile');

現在,當請求和此特定的路由 URI 相匹配時,UserController 類別的 showProfile 方法就會被執行。當然,路由的參數也會被傳遞至該方法。

控制器和命名空間

有一點非常重要,那就是我們在定義控制器路由時,不需要指定完整的控制器路徑。我們只需要「根」App\Http\Controllers 之後的部分類別名稱。預設情況下 RouteServiceProvider 會把routes.php 檔案載入到包含根控制器的路由群組中。

若你選擇在 App\Http\Controllers 目錄內層,使用 PHP 命名空間巢狀或組織控制器,只要使用相對於 App\Http\Controllers 根的特定類別名稱即可。因此,若你的控制器類別全名為App\Http\Controllers\Photos\AdminController,你可以像這樣註冊一個路由:

Route::get('foo', 'Photos\AdminController@method');

命名控制器路由

就像閉包路由,你可以指定控制器路由的名稱:

Route::get('foo', ['uses' => 'FooController@method', 'as' => 'name']);

你也可以使用 route 輔助方法,產生命名控制器路由的 URL:

$url = route('name');

上一篇
DAY11 --- Eloquent: 關聯
下一篇
DAY13 --- [番外]上海行 (其二)
系列文
砍掉重練啦! 森林系男孩之後端工程師潛水App挑戰計畫27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言