iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
1
Modern Web

從基礎學習 ThinkPHP系列 第 13

Day13-從基礎學習 ThinkPHP-Model 基礎操作(1)

  • 分享至 

  • xImage
  •  

前言

接下來這一篇開始會稍微結合一下前面一些的知識來做 Model 的基礎操作,所以這邊將會結合 Controller 和 Route。

起手式

在前面 Model 篇中,我們已經將基本的 Model 給定義完成,但是還是需要有一些基本動作來操作 Model 才可以,所以這邊將會撰寫 Controller 來控制 Model。

首先大多一般情況下可以不用特別去調整 Model 就可以完成接下來的 Model 基礎操作,首先讓我們打開 project/application/about/model/about.php,並輸入以下程式碼 (在 Model 那一章節已經有預先定義了):

<?php
namespace app\about\model;

use think\Model;

class about extends Model
{
  protected $table = 'think_user';
}

這邊是為了避免發生忘記定義基礎 Model,所以才會特別在講一次。

定義 Route

接下來我們要來註冊路由,這樣子才能夠讓我們訪問 URL 時訪問特定的 Controller,首先打開 route/router.php,並註冊兩個路由進去,分別為 getpost

Route::get('/about/user', 'about/index/user');
Route::post('/about/create', 'about/index/create');

接下來要建立一個 HTML 頁面讓我們可以渲染畫面,並傳送資料到 about/index/create,首先在 about/view 底下建立一個資料夾以及 HTML 檔案 index/index.html,而 HTML 內容如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>{$title}</title>
</head>
<body>
  <h1>{$title}</h1>
  <form action="/about/create" method="post">
    <div>
      <label for="name">姓名</label>
      <input type="text" name="name" id="name">
    </div>
    <div>
      <label for="height">身高</label>
      <input type="text" name="height" id="height">
    </div>
    <div>
      <label for="weight">體重</label>
      <input type="text" name="weight" id="weight">
    </div>
    <input type="submit" value="送出">
  </form>
</body>
</html>

控制器

接下來這邊將會新增兩個控制器方法,一個是專門吐顯示表單的 Controller function,另一個則是接收 Form 資料的 Controller function。

首先是顯示表單頁面的 Crotroller function,並且指定我們要渲染的 HTML 檔案:

public function user () {
  $title = '新增資料';

  $this->assign('title',$title);
  return $this -> fetch('index');
}

透過 ThinkPHP 提供的 assign() 方法,可以讓我們將變數資料傳到表單畫面上面去,接下來就可以開啟瀏覽器來看成果啦~ ↓

表單畫面呈現

那麼畫面製作完成後,就是要來製作接收資料的 Controller function,首先先來製作一段簡易的測試程式碼,稍後後面會在針對程式碼做講解:

public function create ($name, $height, $weight) {
    return '姓名:'.$name.'<br/>'.'身高:'.$height.'<br/>'.'體重:'.$weight;
}

接下來讓我們回到表單畫面,並輸入欄位資料之後送出 ↓

送出表單

正常來講你會看到你剛剛送出表單的資料 ↓

回傳結果

從上面流程我們可以看到我們已經成功的將資料傳給後端 & 後端回傳資料結果到畫面上給我們,那麼這原理是如何運作的呢? Controller 又是如何抓取表單欄位資料?

首先 ThinkPHP 在你傳送 form 表單的時候,會去擷取你 input 欄位的 name 名稱,而這 name 名稱剛好會對應到 function 後面的參數,所以我只要寫上相對應的變數名稱就可以成功取得表單欄位資料哩~

結尾

寫 JavaScript 習慣了一度稍微卡一下子在 return '姓名:'.$name.'<br/>'.'身高:'.$height.'<br/>'.'體重:'.$weight; 上,我一直寫成 return '姓名:' + $name + '<br/>'+ '身高:' + $height + '<br/>' + '體重:' + $weight;,突然覺得習慣真恐怖(?!)

本文同步發表於:https://hsiangfeng.github.io/php/20190914/278976166/


上一篇
Day12-從基礎學習 ThinkPHP-Route
下一篇
Day14-從基礎學習 ThinkPHP-Model 基礎操作(2)
系列文
從基礎學習 ThinkPHP31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言