ThinkPHP控制器


控制器

控制器是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>

運行過后:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM