iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
1
Modern Web

從基礎學習 ThinkPHP系列 第 9

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 檔案,初始內容則如下:

<?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,而以下是程式碼初始內容:

<?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 撰寫唷。

本文同步發表於:https://hsiangfeng.github.io/php/20190910/533664939/


上一篇
Day8-從基礎學習 ThinkPHP-MVC 模式
下一篇
Day10-從基礎學習 ThinkPHP-View
系列文
從基礎學習 ThinkPHP31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
q816697q
iT邦新手 5 級 ‧ 2020-03-03 13:49:17

你好
我有問題
我的文件有些都跟你的不太一樣 application資料夾我這邊是APP
像config/app

return [
// 应用地址
'app_host' => env('app.host', ''),
// 应用的命名空间
'app_namespace' => '',
// 是否启用路由
'with_route' => true,
// 是否启用事件
'with_event' => true,
// 默认应用
'default_app' => 'index',
// 默认时区
'default_timezone' => 'Asia/Shanghai',

// 应用映射(自动多应用模式有效)
'app_map'          => [],
// 域名绑定(自动多应用模式有效)
'domain_bind'      => [],
// 禁止URL访问的应用列表(自动多应用模式有效)
'deny_app_list'    => [],

// 异常页面的模板文件
'exception_tmpl'   => app()->getThinkPath() . 'tpl/think_exception.tpl',

// 错误显示信息,非调试模式有效
'error_message'    => '页面错误!请稍后再试~',
// 显示错误信息
'show_error_msg'   => false,

沒有app_debug模式

還有我的namespace都改about
index也有錯誤 如下
页面错误!请稍后再试~
ThinkPHP V6.0.2 { 十年磨一剑-为API开发设计的高性能框架 } - 官方手册

看更多先前的回應...收起先前的回應...
Ray iT邦研究生 5 級 ‧ 2020-03-08 17:33:19 檢舉

這一系列是基於 ThinkPHP 5 撰寫的,後來 ThinkPHP 6 是有針對核心結構再做調整,所以是會有一些許不同的唷 :D

那由於 ThinkPHP 6 近期剛發佈所以還沒說非常穩定,目前來講還是會推薦使用 ThinkPHP 5 會比較好就是了(朋友說的

q816697q iT邦新手 5 級 ‧ 2020-03-10 13:41:06 檢舉

那如果要裝版本5的指令怎麼打呢

Ray iT邦研究生 5 級 ‧ 2020-03-16 08:45:41 檢舉

輸入 composer create-project topthink/think=5.1.* 就可以囉

q816697q iT邦新手 5 級 ‧ 2020-04-28 11:16:06 檢舉

在請問我index跟hellow都是namespace app\about\controller;
但是都顯示控制器不存在:app\about\controller\Index
是哪邊錯了嗎

Ray iT邦研究生 5 級 ‧ 2020-04-29 11:59:03 檢舉

基本上這邊會建議你參考一下這一份完整檔案,然後從中研究看看哩
https://github.com/hsiangfeng/ithelpThinkPHP

q816697q iT邦新手 5 級 ‧ 2020-05-07 13:15:38 檢舉

OK 感謝

我要留言

立即登入留言