Day9-從基礎學習 ThinkPHP-Controller

前言

前面了解了 MVC 架構之後,我們就要準備來撰寫程式碼,首先會寫的是 Controller 的部分,但是在那之前會有一些地方要先改一下設置,這樣才能方便我們開發。

開啟 Debug 模式

我建議在操作接下來的動作之前,先開啟 debug 模式,如果你不開啟 debug 模式你會很難找問題(就跟你寫 JavaScript 不使用 console.log() debug 一樣),那開啟之後你就可以看到比較詳細的錯誤訊息,這樣子對於你在開發上也會比較清楚問題在哪裡,但是要記得部屬專案時,請務必要關閉 debug 模式 唷 ↓

debug 模式開啟

開啟方式很簡單,只要開啟位於專案目錄 config/app.php 中,然後搜尋 app_debug 將該選項修改為 true 這樣就開啟了 debug 模式囉 ↓

debug

起手式

起手式這邊我們會先學習如何定義一個 Controller,那什麼是定義呢?所謂的定義你可以想像成我們在準備要蓋東西的材料,以 JavaScript 舉例的話,就像是建立一個 function 的概念,所以不用想太難唷~

首先讓我們打開目錄到 /project/application 下,然後在底下建立一個資料夾叫 about,並且在底下再建立一個 controller 資料夾(注意不要大寫 C),然後也建立一個 index.php 檔案,初始內容則如下:

1
2
3
4
5
6
7
8
9
10
<?php
namespace app\about\controller;

class Index
{
public function index()
{
return 'About!';
}
}

這邊要注意 namespace 的意思是定義命名空間,所以不要使用預設 namespace app\index\controller; 而是要將命名空間定義成 about,如果不這樣做,將會導致發生衝突問題,當然也會因為你的 namespace 不正確而導致找不到 Controller 的問題發生 ↓

找不到控制器

那麼這樣子就是一個基礎的起手式定義 Controller,非常簡單吧~

但是我們前面有講過,在現階段開發上,我們是採用 Route 來訪問 URL,但是 Route 定義的部分將會在後面做介紹。

URL 訪問

在目錄結構的結尾我有稍微介紹 URL 的結構,主要會是透過 Route 來決定 URL 訪問,那麼這邊再稍微講一下 URL 的訪問相關吧!

首先 ThinkPHP 預設 Controller 訪問 URL 規則是這樣子 http://localhost:8000/index/index,通常 index 可以被忽略,所以只需要輸入 http://localhost:8000 即可,但若我們想要訪問 about 的 Controller 中 index 方法的話,就會變成這樣 http://localhost:8000/about/index,當然也可以只輸入這樣子 http://localhost:8000/about

URL 訪問

但是假使果我們的 about 底下還有其他 Controller呢?例如 HelloWorld.php,而以下是程式碼初始內容:

1
2
3
4
5
6
7
8
9
10
<?php
namespace app\about\controller;

class HelloWorld
{
public function Hello()
{
return 'hello,world!';
}
}

那麼 URL 訪問的方式就會是這樣 http://localhost:8000/about/hello_world/hello

ThinkPHP 在轉換 URL 時,當遇到大寫會轉換為小寫,若是夾在中間的大寫則會轉換為底線 _

hello,world

結尾

其實我們可以發現不透過 View 單純使用 Controller 也是可以呈現畫面給使用者,但是這樣子就有點不符合 MVC 的設計規範,所以這一篇只是介紹基礎的 Controller 定義方法與操作而已,後面還會有更多的 Controller 撰寫唷。

0%