如何新增控制器?
在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,利用它的一個特點。
系統在找不到指定的方法,執行的方法。
在控制器內加入如下方法:
/*
* $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