FormController.class.php
<?php
namespace Home\Controller;
use Think\Controller;
class
FormController extends Controller{
public function
insert(){
$Form = D('Form');
if($Form->create()) {
$result = $Form->add();
// if($result) {
// $this->success('數據添加成功!');
// }else{
// $this->error('數據添加錯誤!');
// }
// }else{
// $this->error($Form->getError());
echo "ok!",$result;
}else{
echo "no!",$Form->getError(),"hh--$result";
}
}
}
Form/add.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>無標題文檔</title>
</head>
<body>
<div class="myform">
<form method="post" action="insert">
標題:<input name="title" type="text" /><br/>
內容:<textarea name="content" rows="5" cols="45"></textarea><br/>
<input type="submit" value="提交" />
</form>
</div>
</body>
</html>
FormModel.class.php(D函數須要有對應的模型類)
<?php
namespace Home\Model;
use Think\Model;
class FormModel extends Model {
//
定義自動驗證
protected $_validate = array(
array('title','require','標題必須'),
);
//
定義自動完成
protected $_auto = array(
array('create_time','time',1,'function'),
);
}
==
建立數據 大多數狀況下,CURD的Create操做一般會經過表單來提交數據,首先,咱們在Home模塊的View/Form 目錄下面建立一個add.html 模板文件,內容爲: <FORM method="post" action="__URL__/insert"> 標題:<INPUT type="text" name="title"><br/> 內容:<TEXTAREA name="content" rows="5" cols="45"></TEXTAREA><br/> <INPUT type="submit" value="提交"> </FORM> 而後,咱們還須要在Home模塊的Controller目錄下面建立一個FormController.class.php文件,暫時只需 要定義FormController類,不須要添加任何操做方法,代碼以下: <?php namespace Home\Controller; use Think\Controller; class FormController extends Controller{ } 接下來,訪問 http://localhost/app/index.php/home/Form/add 就能夠看到表單頁面了,咱們並無在控制器裏面定義add操做方法,可是很顯然,訪問是正常的。由於 ThinkPHP3.2.3快速入門 本文檔使用 看雲 構建 - 13 - ThinkPHP在沒有找到對應操做方法的狀況下,會檢查是否存在對應的模板文件,因爲咱們有對應的add模 板文件,因此控制器就直接渲染該模板文件輸出了。因此說對於沒有任何實際邏輯的操做方法,咱們只需 要直接定義對應的模板文件就好了。 咱們能夠看到,在表單中定義了提交地址是到Form控制器的insert操做,爲了處理表單提交數據,咱們需 要在FormController類中添加insert操做方法,以下: <?php namespace Home\Controller; use Think\Controller; class FormController extends Controller{ public function insert(){ $Form = D('Form'); if($Form->create()) { $result = $Form->add(); if($result) { $this->success('數據添加成功!'); }else{ $this->error('數據添加錯誤!'); } }else{ $this->error($Form->getError()); } } } 若是你的主鍵是自增類型的話,add方法的返回值就是該主鍵的值。不是自增主鍵的話,返回值表示插入 數據的個數。若是返回false則表示寫入出錯。 模型 爲了方便測試,咱們首先在數據庫中建立一個think_form表: CREATE TABLE IF NOT EXISTS `think_form` ( `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `content` varchar(255) NOT NULL, `create_time` int(11) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ; 咱們在insert操做方法中用了D函數,和M函數不一樣,D函數須要有對應的模型類,下面咱們就來建立模型 類。 模型類的定義規範是: 模型名+Model.class.php (模型名的定義採用駝峯法而且首字母大寫) ThinkPHP3.2.3快速入門 本文檔使用 看雲 構建 - 14 - 咱們在Home模塊的Model目錄下面建立FormModel.class.php文件,添加代碼以下: <?php namespace Home\Model; use Think\Model; class FormModel extends Model { // 定義自動驗證 protected $_validate = array( array('title','require','標題必須'), ); // 定義自動完成 protected $_auto = array( array('create_time','time',1,'function'), ); } 主要是用於表單的自動驗證和自動完成,具體用法咱們會用另外的篇幅單獨講述,這裏暫時先略過。咱們 只要瞭解的是,若是使用D函數實例化模型類,通常須要對應一個數據模型類,並且create方法會自動把表 單提交的數據進行自動驗證和自動完成(若是有定義的話),若是自動驗證失敗,就能夠經過模型的 getError方法獲取驗證提示信息,若是驗證經過,就表示數據對象已經成功建立,但目前只是保存在內存 中,直到咱們調用add方法寫入數據到數據庫。這樣就完成了一個完整的Create操做,因此能夠看到 ThinkPHP在建立數據的過程當中使用了兩步: 第一步,create方法建立數據對象 第二步,使用add方法把當前的數據對象寫入數據庫 固然,你徹底能夠跨過第一步,直接進行第二步,可是這樣的預處理有幾個優點: 1. 不管表單有多複雜,create方法均可以用一行代碼輕鬆建立數據對象; 2. 在寫入數據以前,能夠對數據進行驗證和補充; 其實create方法還有不少的功能操做,目的只有一個,確保寫入數據庫的數據安全和有效。 咱們來驗證下表單提交的效果,當咱們不輸入標題就直接提交表單的話,系統會給出標題必須這樣的提示 信息。 ThinkPHP3.2.3快速入門 本文檔使用 看雲 構建 - 15 - 當咱們順利提交表單後,會看到寫入數據表的數據中的 create_time 字段已經有值了,這就是經過模型的 自動完成寫入的。 若是你的數據徹底是內部操做寫入而不是經過表單的話(也就是說能夠充分信任數據的安全),那麼能夠 直接使用add方法,如: $Form = D('Form'); $data['title'] = 'ThinkPHP'; $data['content'] = '表單內容'; $Form->add($data); 也能夠支持對象方式操做: $Form = D('Form'); $Form->title = 'ThinkPHP'; $Form->content = '表單內容'; $Form->add(); 對象方式操做的時候,add方法無需傳入數據,會自動識別當前的數據對象賦值。