真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

ThinkPHP控制器的詳細介紹-創(chuàng)新互聯(lián)

本篇內容介紹了“ThinkPHP控制器的詳細介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

站在用戶的角度思考問題,與客戶深入溝通,找到來賓網站設計與來賓網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網站設計、成都網站制作、企業(yè)官網、英文網站、手機端網站、網站推廣、申請域名、虛擬空間、企業(yè)郵箱。業(yè)務覆蓋來賓地區(qū)。

控制器的定義


在開始之前,我們還是需要明確一下控制器的定義:

" .$id;
  }

  public function top(){
    echo "top page 
";   } }

如所見,前面在路由篇提到的控制器就是這么定義的:

使用相應的命名空間,默認是namespace Home\Controller
加載Think\Controller
新建控制器繼承于Controller(或子類)
采用駝峰命名法,注意首字母大寫
控制器內的公共方法可以看作一個操作,比如上面的read()和top()方法就可以看作操作,我們在路由篇的時候都驗證過了。

http://localhost:8999/index.php/Home/Index/top
就是訪問到top()方法,會在頁面上打印出top page ,再次明確Home代表的是Home模塊

有時候可能會遇到有和系統(tǒng)的關鍵字沖突的方法,這時候就可以使用設置操作方法后綴來解決了,具體請看官方文檔:
http://document.thinkphp.cn/manual_3_2.html#define_controller

前置和后置操作

前置和后置操作指的是在執(zhí)行某個操作方法之前和之后會自動調用的方法,不過僅對訪問控制器有效,如在IndexController中為top()方法添加前置后置方法:

public function _before_top(){
    echo "before top page 
";   }   public function top(){     echo "top page 
";   }   public function _after_top(){     echo "after top page 
";   }

訪問:http://localhost:8999/index.php/Home/Index/top

就會看到打印出:

before top page
top page
after top page

使用前置和后置操作要注意如下兩點:

如果當前的操作并沒有定義操作方法,而是直接渲染模板文件,那么如果定義了前置和后置方法的話,依然會生效。真正有模板輸出的可能僅僅是當前的操作,前置和后置操作一般情況是沒有任何輸出的。

需要注意的是,在有些方法里面使用了exit或者錯誤輸出之類的話 有可能不會再執(zhí)行后置方法了。例如,如果在當前操作里面調用了系統(tǒng)Action的error方法,那么將不會再執(zhí)行后置操作,但是不影響success方法的后置方法執(zhí)行

可以用于表單的過濾和驗證


參數(shù)綁定

參數(shù)綁定是通過直接綁定URL地址中的變量作為操作方法的參數(shù),可以簡化方法的定義甚至路由的解析。

'URL_PARAMS_BIND'    => true


參數(shù)綁定功能默認是開啟的,其原理是把URL中的參數(shù)(不包括模塊、控制器和操作名)和操作方法中的參數(shù)進行綁定。
參數(shù)綁定有兩種方式:按照變量名綁定和按照變量順序綁定,默認使用的是按照變量名綁定,比如看下面的例子:

 public function read($id){
    echo "read page with 
".$id;   }  public function archive($year, $month){     echo "$year 
".$month;   }

對,這個就是上一篇路由所涉及的內容,在之前路由的路由設置處

'blogs/:id'               => array('Index/read')
我們將:id直接映射給read()方法的參數(shù)$id,所以現(xiàn)在回頭再看,其實路由規(guī)則就是給了你一個自定義URL的功能。如果去掉上面的路由設置,我們正確的訪問方式是:

http://localhost:8999/Home/index/read/id/3

上面的URl中id就是變量名,如果你寫成:

 public function read($title){
    echo "read page with 
".$title;   }

那么訪問地址就是:

http://localhost:8999/index.php/Home/index/read/title/3

對于多個參數(shù)綁定的情況,只要將相應的變量名和值傳進來就可以了,不在乎順序,比如下面兩個會返回相同的結果:

http://localhost:8999/index.php/Home/index/archive/year/2012/month/12

http://localhost:8999/index.php/Home/index/archive/month/12/year/2012

需要注意的是,不管那種情況之下,當你訪問

http://localhost:8999/index.php/Home/index/read/
是會報錯的:

參數(shù)錯誤或者未定義:id
解決的一個好方法就是,給綁定的參數(shù)設置默認值,比如:

 public function read($id=0){
    echo "read page with 
".$id;   }

這樣再次訪問上面的URL,就會輸出:

read page with
0


tips:給綁定參數(shù)設置默認值是一個避免報錯的好辦法
在實際的開發(fā)中,我們其實會見到沒有顯示變量名這樣的URL,如:

http://localhost:8999/index.php/Home/index/read/3

怎么解決呢?這個時候,我們其實就可以用到第二種參數(shù)綁定:按照變量順序綁定。要使用這種參數(shù)綁定,需要先在設置項中設置:

'URL_PARAMS_BIND_TYPE' => 1

一旦設置變量順序綁定,這種情況下URL地址中的參數(shù)順序非常重要,不能隨意調整。這種情況下操作方法的定義不需要改變,只是訪問的URL變了而已,現(xiàn)在用上面的方式訪問就可以正確訪問了。

如果在變量順序綁定的情況下,我們訪問:

http://localhost:8999/index.php/Home/index/archive/2012/12

http://localhost:8999/index.php/Home/index/archive/12/2012

這兩個結果顯然是不一樣,后者并不是我們想要的。所以這種情況需要嚴格遵守順序來傳值。

偽靜態(tài)

URL偽靜態(tài)通常是為了滿足更好的SEO效果,ThinkPHP支持偽靜態(tài)URL設置,可以通過設置URL_HTML_SUFFIX參數(shù)隨意在URL的最后增加你想要的靜態(tài)后綴,而不會影響當前操作的正常執(zhí)行,默認情況下,偽靜態(tài)的設置為html。但我們可以自己設置,例如

'URL_HTML_SUFFIX'=>'shtml'

如果希望支持多個偽靜態(tài)后綴,可以直接設置如下:

'URL_HTML_SUFFIX' => 'html|shtml|xml'


如果此項設置留空則表示可以支持所有的靜態(tài)后綴。

也可以設置禁止訪問的URL后綴通過URL_DENY_SUFFIX來設置,例如:

'URL_DENY_SUFFIX' => 'pdf|ico|png|gif|jpg',
注: URL_DENY_SUFFIX的優(yōu)先級比URL_HTML_SUFFIX要高。


URL生成

為了配合所使用的URL模式,我們需要能夠動態(tài)的根據當前的URL設置生成對應的URL地址,為此,ThinkPHP內置提供了U方法,用于URL的動態(tài)生成,可以確保項目在移植過程中不受環(huán)境的影響。

定義規(guī)則

U方法的定義規(guī)則如下(方括號內參數(shù)根據實際應用決定):
U('地址表達式',['參數(shù)'],['偽靜態(tài)后綴'],['顯示域名'])

地址表達式


地址表達式的格式定義如下:

[模塊/控制器/操作#錨點@域名]?參數(shù)1=值1&參數(shù)2=值2...
如果不定義模塊的話 就表示當前模塊名稱,下面是一些簡單的例子:

U('User/add') // 生成User控制器的add操作的URL地址
U('Article/read?id=1') // 生成Article控制器的read操作 并且id為1的URL地址
U('Admin/User/select') // 生成Admin模塊的User控制器的select操作的URL地址


參數(shù)

U方法的第二個參數(shù)支持數(shù)組和字符串兩種定義方式,如果只是字符串方式的參數(shù)可以在第一個參數(shù)中定義,例如:

U('Article/cate',array('cate_id'=>1,'status'=>1))
U('Article/cate','cate_id=1&status=1')
U('Article/cate?cate_id=1&status=1')

三種方式是等效的,都是生成Article控制器的cate()操作 并且cate_id為1 status為1的URL地址

但是不允許使用下面的定義方式來傳參數(shù):

U('Article/cate/cate_id/1/status/1');

生成路由地址

U方法還可以支持路由,如果我們定義了一個路由規(guī)則為:

'blogs/:id\d'=>'Index/read'

那么可以使用

U('/blogs/1');

最終生成的URL地址是:

http://localhost:8999/index.php/Home/blogs/1


跳轉和重定向

這應該是在開發(fā)中最常用的功能之一。在應用開發(fā)中,經常會遇到一些帶有提示信息的跳轉頁面,例如操作成功或者操作錯誤頁面,并且自動跳轉到另外一個目標頁面。系統(tǒng)的\Think\Controller類內置了兩個跳轉方法success()和error(),用于頁面跳轉提示。

跳轉

使用方法很簡單,比如我們在Index控制器下新建一個方法user(),寫上下面的內容:

public function user()
  {
    $User = M('User');
    $data['username'] = 'Think';
    $data['email'] = 'Think@gmail.com';
    $result = $User->add($data);
    if($result){
      $this->success('success', '/Home/User/addUser');
    } else {
      $this->error('failed');
    }
  }

M('User')表示實例化一個User對象,add()方法是向數(shù)據庫添加一條紀錄。然后我們需要新建一個UserController,在里面寫上addUser()方法

然后在瀏覽器中訪問http://localhost:8999/Home/Index/user,就可以看到add user done!了,下面詳細來說說這兩個重定向方法。

success()和error()方法的第一個參數(shù)表示提示信息,第二個參數(shù)表示跳轉地址,第三個參數(shù)是跳轉時間(單位為秒),例如:

// redirect to /Article/index after 3 seconds when success
$this->success('done','/Home/Article/index',3);
// redirect to /Article/error after 5 seconds when failed
$this->error('failed','/Home/Article/error',5);

如果不設置跳轉時間,默認的等待時間success()方法是1秒,error()方法是3秒。看到上面的兩個跳轉地址前面都帶上了/Home,如果你想簡寫為/Article/index,你需要在ThinkPHP的入口文件(項目目錄下的index.php)中加上下面一行:

define('BIND_MODULE','Home');

而且這兩個方法都有對應的模板,默認的設置是兩個方法對應的模板都是:

'TMPL_ACTION_ERROR' => THINK_PATH . 'Tpl/dispatch_jump.tpl',

'TMPL_ACTION_SUCCESS' => THINK_PATH . 'Tpl/dispatch_jump.tpl',
你可以根據自己的需要來修改模版。

重定向

Controller類的redirect()方法可以實現(xiàn)頁面的重定向功能。
redirect()方法的參數(shù)用法和U函數(shù)的用法一致(參考上一部分URL生成部分),例如:

$this->redirect('/Home/Article/show', array('id' => 2), 3, 'Redirecting...');
上面的用法是停留3秒后跳轉到Article控制器的show()操作,并且顯示頁面跳轉中字樣Redirecting...,重定向后會改變當前的URL地址。

為了成功進行測試,我們在IndexController下添加redirectToArticle()方法并寫上上面那行代碼:

public function redirectToArticle()
  {
    $this->redirect('/Home/Article/show', array('id' => 2), 3, 'Redirecting...');
  }

然后我們創(chuàng)建一個ArticleController,并且為他添加show()方法:

namespace Home\Controller;

use Think\Controller;

class ArticleController extends Controller {

  public function show($id)
  {
    echo 'This is an Article Page';
    // $id 變量我們后續(xù)會用到,現(xiàn)在只是演示跳轉
  }
}

然后在瀏覽器訪問:http://localhost:8999/Home/Index/redirectToArticle,等待三秒,你就可以看到跳轉之后的頁面了。

如果你僅僅是想重定向要一個指定的URL地址,而不是到某個模塊的操作方法,可以直接使用redirect()函數(shù)重定向,例如

$this->redirect('/Home/Article/show/id/3', 'Redirecting...',3);

注:控制器的redirect()方法和redirect()函數(shù)的區(qū)別在于前者是用URL規(guī)則定義跳轉地址,后者是一個純粹的URL地址
注:好像官方文檔是這樣寫的

$this->redirect('/New/category/cate_id/2', 5, '頁面跳轉中...');

“ThinkPHP控制器的詳細介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網站,小編將為大家輸出更多高質量的實用文章!


當前題目:ThinkPHP控制器的詳細介紹-創(chuàng)新互聯(lián)
URL鏈接:http://weahome.cn/article/ghejo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部