PHP Laravel - Controller 應用與介紹 - 筆記長也NotesHazuya

PHP Laravel - Controller 應用與介紹

2020-06-03 09:30:03   Laravel

Controller

Controller 扮演著處理資料並回傳給前端呈現的角色。在 laravel 當中, controller 可以在 app/Http/Controllers 找到,日後所有新增的 controller 都會在這裡。

基本上每一個 controller 也都會是一個 class ,laravel 會將請求轉為對應的類別,我們可以在 controller 當中輕易地處理一些商業邏輯。

建立 Controller

在你專案的根目錄下執行

php artisan make:controller postController

會發現 app/Http/Controllers  多了一個 postController.php 檔案

而所有的 Controller 都是繼承 Controller.php 當中的 Controller 類別。

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class postController extends Controller
{
    //
}

這個指令只提供了基本的 controller 類別。

php artisan make:controller --resource NewsController

而這個指令提供了 CRUD 操作函數。

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class NewsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

讓 route 轉送請求至 controller

建立完成 controller 之後,要在 route 讓請求被轉發到 controller。

到 web.php 下面新增路由

Route::get('/news','NewsController@index');

啟動伺服器之後瀏覽 /news ,會發現什麼都沒有,因為我們還沒在 Controller 裡面新增任何東西。

在 NewsController 中的 index 方法寫點內容~

public function index()
{
    return "呈現新聞";
}

這樣就可以看到一些東西了~

Route::resource('news','Newscontroller');

這個方法可以新增全部的 CRUD 路由到 web.php 當中。

php artisan route:list

利用這個指令可以列出目前所有的路由

發現所有的 CRUD 的指令都已經被新增至路由了。

__invoke 方法

如果你的 controller 只做一件事情,可以直接在 controller 只新增 __invoke 方法

route

Route::get('user/{id}', 'ShowProfile');

controller

namespace App\Http\Controllers;

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

class ShowProfile extends Controller
{
    public function __invoke($id)
    {
        //
    }
}

替被轉傳至 controller 的請求加上 middleware

在 web.php 加上中間件

Route::get('admin', 'UserController@show')->middleware('auth');

也可以在 controller 中使用中間件

class UserController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

}

如果你的中間件要做的事情很少,也可以直接寫成閉包的形式,不必新增新的中間件

$this->middleware(function ($request, $next) {
    // ...
    return $next($request);
});

關於中間件的部分之後會有文章專門介紹。

下一篇文章將會介紹基本的 database 使用,會使用 laravel 中的 DB 類別對資料庫進行 select、update、insert以及 delete 的操作。


長也

我只專注做好自己能做的事情,別人要做什麼我無法干涉。