0%

PHP Laravel 系列 - (7) Route and Controller

1. 簡單介紹 Http Methods

image-20211016115313736

可以做到url相同方法不同,執行不同的程式區段

image-20211016115542702

2. 加入route規則

請打開routes\web.php檔案加入以下規則

1
2
3
4
//個別指定方法 controller@m
Route::post('/','ProductController@create');
//這樣的寫法是CRUD
Route::resource('products','ProductController');

3. 使用artisan指令建立controller

在這個project的根路徑下執行以下指令

1
php artisan make:controller ProductController

接著我們會看到在app\Http\Controllers底下產生了一個PorductController.php檔案

image-20211016160637461

ProductController.php

1
2
3
4
5
6
7
8
9
10
11
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ProductController extends Controller
{
//
}

4. 使用artisan指令建立常見的CRUD Controller 範本

先把剛剛的檔案刪掉,再執行以下指令

1
php artisan make:controller ProductController --resource

ProductController.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ProductController 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)
{
//
}
}

ctrl + 左鍵 點擊Request就會跳到該程式碼囉

image-20211016161352536

use 是使用這個物件

5. 使用artisan指令查看目前的route list

1
php artisan route:list

5.1. 出錯啦

Illuminate\Contracts\Container\BindingResolutionException

image-20211016161916118

我們去app\Providers\RouteServiceProvider.php編輯一下,加入下一行程式

1
protected $namespace = 'App\Http\Controllers';

image-20211016162209726

接著再執行一次

1
php artisan route:list

就正常啦,我們可以看到出現了跟products有關的route囉

image-20211016163954265

6. 執行更新

當有新增檔案之後,有時候會讀取不到,所以下這個指令是進行更新的意思

1
composer dump-autoload

7. 簡單瀏覽

7.1. index

1
http://127.0.0.1:8000/products

7.2. create

1
http://127.0.0.1:8000/products/create

7.3. show

1
http://127.0.0.1:8000/products/1

8. 問題

8.1. 如何添加artisan

8.2. php namespace