THINKPHP框架之控制器


如何新增控制器?


在Lib/Action中新增一個控制器:ProductAction.class.php:


<?php

class ProductAction extends Action{
    
    public function index(){
        echo 'product模塊 , index方法';
    }
}


然後通過url訪問: 這此要引入一個非常重要的一個概念:

url調度模式:就是我們在訪問網站時的使用不同的ur訪問方式


tp支持四種訪問方式:可以通過URL_MODEL參數來控制。


1.普通模試:默認都支持

www.tp.com/index.php?m=Product&a=index&id=1

m模塊名

a動作

2.pathinfo模(tp中的默認調度模式):

http://www.tp.com/index.php/Product/index/id/1/name/zhangsan

product模塊名

index方法名

id是參數

1爲值 。。。。。 一般都後面的參數都是成對出現的。以/分隔。


3. rewrite模式,即重寫。 在頁面靜態化中用的

可以把入口文件省略掉:

http://www.tp.com/Product/index/id/1/name/zhangsan

設置方法:

1httpd.conf配置文件中加載了mod_rewrite.so模塊

2AllowOverride NoneNone改爲All  (注意不能與 #Options Indexes同時出現,否則會出現沒有權限訪問)

3、確保URL_MODEL設置爲2

4、把下面的內容保存爲.htaccess文件放到入口文件的同級目錄下

<IfModulemod_rewrite.c>

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

</IfModule>



4.兼容模式:

如果不支持web服務器不支pathinfo或rewrite模式,但我們還想使用,可以考慮用兼容模式

http://www.tp.com/index.php?s=Product/index/id/1/name/zhangsan

或者:http://www.tp.com/?s=Product/index/id/1/name/zhangsan



在配置文件中,一個URL_MODEL的0123分別表示。默認都支持,這是怎麼回事????


無論什麼模式都支持普通模式,在表單提交的時候就可以看出區別了。


路徑分隔符:'URL_PATHINFO_DEPR'     => '-',    // PATHINFO模式下,各參數之間的分割符號


http://www.tp.com/?s=Product-index-id-1-name-zhangsan



控制器中的空操?用這個方式可以簡化url,利用它的一個特點。

系統在找不到指定的方法,執行的方法。


在控制器內加入如下方法:

    /*
     * $name 表示請求的方法
     */
    public function _empty($name){
        echo '請求頁面無法顯示'.$name;
    }



5、 空模塊

 

空模塊的概念是指當系統找不到指定的模塊名稱的時候,系統會嘗試定位空模塊(EmptyAction),利用這個機制我們可以用來定製錯誤頁面和進行URL的優化。

 

l  EmptyAction

 

       MODULE_NAME

 

我們現在嘗試請求一個url

 

http://localhost/tp/index.php/Student/shanghai

 

由於我們系統中沒有StudentAction這個控制器,所以會報錯

 

我們在項目創建一個叫EmptyAction類,以後,如果系統找不到相應模塊時,會自動定位到這個Action中,如果我們在這個類中再添加一個叫_empty的方法,這樣一樣,可以屏蔽所有來自url的錯誤

 

5、 項目分組

 

在大型項目裏,一個大的項目往往是由若干個小項目組成。比如說:可能是由

前臺項目、後臺項目、會員博客、論壇

 

l  config.php

 

l  APP_GROUP_LIST              分組列表

l  DEFAULT_GROUP               默認分組             

 

在我們項目中,現在開始分組:

1)前臺項目       Home

2)後臺項目         Admin

 

修改配置文件:

 

 

一般來說:如果項目中分組,那麼,你的控制器和模板也是需要分組的,模型是不需要分組的

 

在lib/Action目錄下,創建兩個文件夾叫Home,Admin,將之前的所有控制器放到Admin下,

 

Pathinfo模式:

http://www.tp.com/index.php/Home/Student/read


普通模式:

http://www.tp.com/index.php?g=Home&m=Student&a=read

http://www.tp.com/index.php?g=Admin&m=User&a=add


如果不指定分組,則走默認分組。

http://www.tp.com/index.php?m=Student&a=read



一般地,模板和控制器要分組,模型不分組。


5、 url大小寫

 

默認來講,url是區分大小寫的

 

‘URL_CASE_INSENSITIVE’=>true  表示不區分大小寫


6、 前置後置操作

 

  _before_

 _after_

 

       publicfunction _before_index(){}

       publicfunction index(){}

       publicfunction _after_index(){}

 

舉例:比我們有一個方法叫index,設置它的前置和後置操作是指

 

添加一個方法叫  _before_index,表示前置操作

添加一個方法叫  _after_index,表示後置操作

 

在執行index方法之前,會自動先執行_before_index方法,執行完index方法之後,會自動執行 _after_index方法


6、 頁面跳轉/頁面重定向

 

在控制器中,有兩個方法,分別是success和error,表示操作在成功或失敗時的跳轉地址

 

l  success

l  error

 

在配置文件config.php中,有兩個配置選項,分別表示success方法和error方法所使用的模板文件路徑,如果有需要,可以考慮自定義

 

l  TMPL_ACTION_SUCCESS

l  TMPL_ACTION_ERROR


用到一個叫模板常量:__URL__


<form method="get" action="/index.php/user/checklogin"> //表示當前模塊的路徑再加上checklogin方法



$this->redirect(“news/show”, array(‘id’=>2)); 重定向到news模塊的show方法,並帶個id的參數

可以跳當前模塊、其他模塊和跨項目的跳轉。。。


5、 獲取系統變量

 

l  _get          $_GET

l  _post         $_POST

l  _request           $_REQUEST

l  _session            $_SESSION

l  _cookie            $_COOKIE

l  _server             $_SERVER

 

 

語法:  $this->方法();



5、 判斷請求類型

 

 isGet()            

isPost()












發佈了89 篇原創文章 · 獲贊 20 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章