如何新增控制器?
在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
設定方法:
1、httpd.conf配置檔案中加載了mod_rewrite.so子產品
2、AllowOverride None将None改為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,利用它的一個特點。
系統在找不到指定的方法,執行的方法。
在控制器内加入如下方法:
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()