控制器
控制器是MVC模式中的核心,tp默認有一個Index控制器:
1.控制器的命名規則:新建一個主頁面的控制器
在JiaoWu/Home/Controller下新建一個文件:MainController.php書寫方式是駝峰法,即首字母大寫Main是控制器的名稱,並做一個XianShi的方法
里面的內容書寫方式仿照之前的IndexController.php
<?php namespace Home\Controller; use Think\Controller; class MainController extends Controller { public function Xianshi()//$name,$ids)//參數的順序無所謂 { echo "Hello "; } }
以下是運行后的結果:
2.C()方法
C(名稱) 獲得配置變量(convertion.php config.php)信息
C(名稱,值) 設置配置變量信息
配置修改的方法是在config.php中:如下
<?php return array( //'配置項'=>'配置值' 'URL_MODEL' => 1, // URL訪問模式,可選參數0、1、2、3,代表以下四種模式: // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 默認為PATHINFO 模式
讀取配置:
<?php namespace Home\Controller; use Think\Controller; class MainController extends Controller { public function Xianshi()//$name,$ids)//參數的順序無所謂 { $model = C('URL_MODEL');//讀取配置 echo $model; //C('URL_MODEL',0);//0可以2,3不可以讀取和修改配置 //echo U("admin"); //echo "Hello";
運行后結果是:1
動態配置,修改配置C('參數名稱','新的參數值');
使用:
C('URL_MODEL',0);//0可以2,3不可以讀取和修改配置
echo U("admin");
顯示結果:
3.前置操作和后置操作
<?php namespace Home\Controller; use Think\Controller; class MainController extends Controller { //前置操作(自動調用) public function _before_Xianshi() { echo "執行顯示之前<br>"; } public function Xianshi()//$name,$ids)//參數的順序無所謂 { echo "Hello<br>"; } //后置操作 public function _after_Xianshi() { echo "執行顯示之后"; }
運行后的結果:
4.Action綁定參數
當一個參數時
public function Xianshi($name) { echo $name."主頁面<br>"; }
顯示結果:
public function Xianshi($name,$ids) { echo $name.$ids."主頁面<br>"; }
顯示結果:(參數的順序是無所謂)
5.調用模板信息:
控制器里面的方法是:
public function CeShi()//調用模板顯示 { $this->display(); }
在view下面新建如下的目錄及文件,文件叫做CeShi.html
顯示代碼:
<body> <a href="/tp/index.php/Home/Main/Xianshi/ids/1/name/zhangsan">調用顯示操作</a> </body> </html>
訪問路徑:http://localhost:8080/tp/index.php/Home/Main/CeShi
跳轉后為:http://localhost:8080/tp/index.php/Home/Main/Xianshi/ids/1/name/zhangsan
頁面顯示效果:
6.URL大小寫
瀏覽器地址欄中對大小寫不敏感
Thinkphp/conf/convertion.php中可以修改url大小寫:
'URL_CASE_INSENSITIVE' => true, // 默認false 表示URL區分大小寫 true則表示不區分大小寫
復制后粘貼到自己的配置文件中,true改為false發現還是不區分大小寫(有bug),
知道有這個配置就好
7.后台注冊變量,在前台訪問
后台注冊的方法與Smarty模板類似:
public function CeShi()//調用模板顯示 { $this->assign("test","hello"); $this->display(); }
修改配置中的開始結束標記:
由原來的{}改為<{}>
'TMPL_L_DELIM' => '<{', // 模板引擎普通標簽開始標記 'TMPL_R_DELIM' => '}>', // 模板引擎普通標簽結束標記
html模板內容:
<body>
<!--所傳的參數的位置可以變化-->
<a href="/tp/index.php/Home/Main/Xianshi/ids/1/name/zhangsan">調用顯示操作</a>
<div><{$test}></div>
</body>
</html>
瀏覽器的地址欄:http://localhost:8080/tp/index.php/Home/Main/CeShi
顯示內容:
8. 修改模版引擎,可將下面'Think'-->'Smarty',不過兩者差別不大,不建議修改
兩者很多內容是相連的,有很多方法都相似
'TMPL_ENGINE_TYPE' => 'Think', // 默認模板引擎 以下設置僅對使用Think模板引擎有效
9.獲取輸入變量:POST與GET方法
CeShi.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無標題文檔</title> </head> <body> <!--所傳的參數的位置可以變化--> <a href="/tp/index.php/Home/Main/Xianshi/ids/1/name/zhangsan">調用顯示操作</a> <div><{$test}></div> <!--<form action="/tp/index.php/Home/Main/Xianshi" method="post">--> <form action="__CONTROLLER__/Xianshi" method="post"> <input type="text" name="name" /> <input type="submit" value="提交" /> </form> </body> </html>
MainController.class.php
<?php namespace Home\Controller; use Think\Controller; class MainController extends Controller { public function Xianshi()//$name,$ids)//參數的順序無所謂 { echo $_POST["name"]; } public function CeShi()//調用模板顯示 { //var_dump(get_defined_constants(true)); $this->assign("test","hello"); $this->display(); } }
常量:
調取所有常量信息,加true可分類顯示
var_dump(get_defined_constants(true));
'__ROOT__' => string '/thinkphp' (length=9)找根目錄
'__SELF__' => string '/thinkphp/index.php/Home/Main/CeShi' (length=35)當前所有路徑(相比action,能取更多內容)
'__APP__' => string '/thinkphp/index.php' (length=19)取到入口文件
'__MODULE__' => string '/thinkphp/index.php/home' (length=24)取到當前模塊
'__CONTROLLER__' => string '/thinkphp/index.php/home/main' (length=29)取到當前控制器
'__ACTION__' => string '/thinkphp/index.php/home/main/ceshi' (length=35)取到當前操作方法
10.實現頁面的登錄
在MainContriller.class.php中新建一個方法
public function Login() { //實現兩個邏輯:顯示頁面,實現登錄 if(empty($_POST)) { $this->display(); } else { //實現登錄 echo "實現登錄"; } }
在View中新建Login目錄然后新建login.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無標題文檔</title> </head> <body> <!--指向自身--> <form action="__ACTION__" method="post"> 請輸入用戶名:<input type="text" name="name" /><br /> 請輸入密碼:<input type="password" name="pwd" /><br /> <input type="submit" value="登錄" /> </form> </body> </html>
運行過后: