【小(xiǎo)編推薦】ThinkPHP3.2——Action<α 參數(shù)綁定

2014-06-26  ₩€≈±; |   發布者:✔↑≥梁國(guó)芳  &nb×‍sp;|   查看(kàn):3320次

Thinkphp

參數(shù)綁定是(shì)通(tōng)過直接綁定URL地(dσε✔ì)址中的(de)變量作(zuò)為(wèi) ε<ε操作(zuò)方法的(de)參數(shù),可(kě)以簡化(hu☆♣‌™à)方法的(de)定義甚至路(lù)由的(de)解析。

參數(shù)綁定功能(néng)默認是(shì)開(kāi)啓的→σ(de),其原理(lǐ)是(shì)把URL中的₩→☆(de)參數(shù)(不(bù)包括模£®✔↓塊、控制(zhì)器(qì)和(hé)操作(zuò)名 ₹ )和(hé)操作(zuò)方法中的(de)參數₩©β(shù)進行(xíng)綁定。

要(yào)啓用(yòng)參數(shù)綁定功能(néng),首先确 α∏Ω保你(nǐ)開(kāi)啓了(le)URL_PARAMS_BIND設置:

  1. 'URL_PARAMS_BIND' => true, // URL變量綁定到(dào)操作(zuò)方​​♣法作(zuò)為(wèi)參數(shù)

參數(shù)綁定有(yǒu)兩種方式:按照(zhào)變量名綁定和(hé)按照(zhào)變量順序綁定

按變量名綁定

默認的(de)參數(shù)綁定方式是(shì)按照β☆✘(zhào)變量名進行(xíng)綁定,例如(rú),我們給B✘≤log控制(zhì)器(qì)定義了(leΩβ₽ )兩個(gè)操作(zuò)方法read和(hé)arc±₩ <hive方法,由于read操作(zuò)需要(yào)指定一(yī)個(gè)♦¶✔id參數(shù),archive方法需要(yào)指定年(nián)份(y×β$ear)和(hé)月(yuè)份(month)兩個(gè)↓✔™Ω參數(shù),那(nà)麽我們可(kě)以如(rú)下(xià)定義:

  1. namespace Home\Controller;
  2. use Think\Controller;
  3. class BlogController extends Controller{
  4. public function read($id){
  5. echo 'id='.$id;
  6. }
  7.  
  8. public function archive($year='2013',$month='01'){
  9. echo 'year='.$year.'&month='.$month;
  10. }
  11. }

注意這(zhè)裡(lǐ)的(de)操作(zuò≤©™)方法并沒有(yǒu)具體(tǐ)的(de)業≠♥(yè)務邏輯,隻是(shì)簡單的(de)示範。

URL的(de)訪問(wèn)地(dì)址©£∏‍分(fēn)别是(shì):

  1. http://serverName/index.php/Home/Blo♦γg/read/id/5
  2. http://serverName/index.php/Home/Blog/archiv∏‌≤≠e/year/2013/month/11

兩個(gè)URL地(dì)址中的(de)id參數(s₽<&÷hù)和(hé)year和(hé)month參數(shù)會(huì)自(ε↔♣zì)動和(hé)read操作(zuò)方÷±↑λ法以及archive操作(zuò)方法的(de)同名參數&γγ (shù)綁定。

變量名綁定不(bù)一(yī)定由訪問(wèn)U♠  ★RL決定,路(lù)由地(dì)址也(yě)能(néng)起到(d∏≤γ∏ào)相(xiàng)同的(de)作(zuò)☆÷用(yòng)

輸出的(de)結果依次是(shì):

  1. id=5
  2. year=2013&month=11

按照(zhào)變量名進行(xíng)參數(shù)綁定的(β→∏de)參數(shù)必須和(hé)URL中傳入的(de)變量 ≤↑•名稱一(yī)緻,但(dàn)是(shì)參數(shù)順序不(bù)需要•≠‍β(yào)一(yī)緻。也(yě)就(jiù)是(shì)說(shuō)≥÷≥

  1. http://serverName/index.php/Ho§™¥ me/Blog/archive/month/11/year/2013®λ

和(hé)上(shàng)面的(de)訪問(wènπ™)結果是(shì)一(yī)緻的(de),URL中的(de)參數(shù)順序≤γ♠和(hé)操作(zuò)方法中的(de)參數(shù)順序都(dōu)可←€(kě)以随意調整,關鍵是(shì)确保參數(shù)名稱一(y &↕βī)緻即可(kě)。

如(rú)果使用(yòng)下(xià)面的(de)UR★ £αL地(dì)址進行(xíng)訪問(wèn),參數(sφ‌♠hù)綁定仍然有(yǒu)效:

  1. http://serverName/index.php?s=/Home/Blog/r≠←Ωead/id/5
  2. http://serverName/index.php?s=/Home/B÷↓∞≥log/archive/year/2013/month/ <11
  3. http://serverName/index.php?c=←δBlog&a=read&id=5
  4. http://serverName/index.php?c=Blog&a=a✔✔Ωrchive&year=2013&a€α₽φmp;month=11

如(rú)果用(yòng)戶訪問(wèn)的(de₹§γβ)URL地(dì)址是(shì)(至于為(w•↕©★èi)什(shén)麽會(huì)這(zhè)麽訪問(wèn)暫且不(bùσ←¶✘)提):

  1. http://serverName/index.ph♥✘←πp/Home/Blog/read/

那(nà)麽會(huì)抛出下(xià)面的(de)異常提示: 參數(shù)錯(cuò)誤:id

報(bào)錯(cuò)的(de)原因很(hěn)簡單,因 ¥∏α為(wèi)在執行(xíng)read操作(zuò)方法的(de)時(shíΩ>)候,id參數(shù)是(shì)必須傳入參γ ∞數(shù)的(de),但(dàn)是(shì)方法無法從(cóng)URL地♠$®¶(dì)址中獲取正确的(de)id參數(shù)信息。由于我們不(bù)‍±¶能(néng)相(xiàng)信用(yòng)戶的(de)任何輸入,因此​§★建議(yì)你(nǐ)給read方法的(de)id參數(shù)添加" 默認值,例如(rú):

  1. public function read($id=0){
  2. echo 'id='.$id;
  3. }

這(zhè)樣,當我們訪問(wèn) http://serverName/index.php/Home/Blogβ♠/read/ 的(de)時(shí)候 就(jiù)會(huì☆±Ω≤)輸出

  1. id=0

當我們訪問(wèn) http://serverName/index.php/Home/​ ×↑Blog/archive/ 的(de)時(shí)候,輸出:

  1. year=2013&month=01

始終給操作(zuò)方法的(de)參數(shù)定義默認值是(shì)一(yī≥"←)個(gè)避免報(bào)錯(cuò)的(de)←"好(hǎo)辦法

按變量順序綁定

第二種方式是(shì)按照(zhào)變量的(de)順序綁定,這(zhè)•$種情況下(xià)URL地(dì)址中的(de)參數♣∞↕(shù)順序非常重要(yào),不(bù)能(néng)随意調整↔•。要(yào)按照(zhào)變量順序進行(xí‍✘σ×ng)綁定,必須先設置URL_PARAMS_BIND_TYPE為(wèi)1:

  1. 'URL_PARAMS_BIND_TYPE' => 1, // 設置參數(shù)綁定按照(zhào•∑£ )變量順序綁定

操作(zuò)方法的(de)定義不(bù)需要(yào)改變,URL的(☆​δ÷de)訪問(wèn)地(dì)址分(fēn)Ω™≥σ别改成:

  1. http://serverName/index.php/Home/Blog/ εread/5
  2. http://serverName/index.php/Ho↓✔¶me/Blog/archive/2013/11

輸出的(de)結果依次是(shì):

  1. id=5
  2. year=2013&month=11

這(zhè)個(gè)時(shí)候如(rú)果改成

  1. http://serverName/index.php/Home/Blog/§αεarchive/11/2013

輸出的(de)結果就(jiù)變成了(le):

  1. year=11&month=2013

顯然就(jiù)有(yǒu)問(wèn)題了(le),所以←✘‌不(bù)能(néng)随意調整參數(shù)在URL中的(≠& Ωde)傳遞順序,要(yào)确保和(hé)你(nǐ)的(¥↕de)操作(zuò)方法定義順序一(yī)緻。

可(kě)以看(kàn)到(dào),這(‍↓×zhè)種參數(shù)綁定的(de)效果有(yǒu)點類似于簡單的(♠©¥de)規則路(lù)由。

按變量順序綁定的(de)方式目前僅對(duì)PATHINFO地(dì)址有(λ↕yǒu)效,所以下(xià)面的(de)URL訪問(w↑♦↓èn)參數(shù)綁定會(huì)失效:

  1. http://serverName/index.php?c=Blog&a¶≈✘=read&id=5
  2. http://serverName/index.php?c=Blog&a=a   rchive&year=2013&m​γonth=11

但(dàn)是(shì),兼容模式URL地(dì)址訪問(wèn)♠ λ‌依然有(yǒu)效:

  1. http://serverName/index.php?s=/Home/Blog/r¥>∞ead/5
  2. http://serverName/index.php?s=/​∞Home/Blog/archive/201≥÷≥♥3/11

如(rú)果你(nǐ)的(de)操作(zuò)方法定義都(≥£dōu)不(bù)帶任何參數(shù)或者不(bùδ÷™←)希望使用(yòng)該功能(néng)的(de)話(huà)‍¥₹±,可(kě)以關閉參數(shù)綁定功能(néng):

  1. 'URL_PARAMS_BIND' => false