1. 程式人生 > >Thinkphp 3.1.3中display方法呼叫其他模組的操作模板的bug

Thinkphp 3.1.3中display方法呼叫其他模組的操作模板的bug

根據thinkphp手冊的說法,假如你在UserAction的index方法中想呼叫AdminAction中info方法所對應的模板,應該這樣寫:

$this->display('Admin:info');

可是當你這樣寫了,你發現什麼了?

對,報錯,提示本模組(User_Admin_info)模板不存在(筆者修改了分隔符)

到網上搜索一通,發現所有的論壇、部落格都理直氣壯得抄襲著Thinkphp開發手冊中原話的內容,彷彿他們已經做過測試,這樣寫就沒有問題一樣。

他們的原文都是這樣說的:

格式:display('模組名:操作名')例如,當前是User模組,我們需要呼叫Member模組的read操作模版 ,使用:

  1. $this->display('Member:read'); 
這種方式也不需要寫模板檔案的路徑和字尾,嚴格來說,這裡面的模組名和操作名並不一定需要有對應的模組或者操作,只是一個目錄名稱和檔名稱而已,例如,你的專案裡面可能根本沒有Public模組,更沒有Public模組的menu操作,但是一樣可以使用
  1. $this->display('Public:menu'); 
輸出這個模板檔案。理解了這個,模板輸出就清晰了

一番折騰之後,得出結論:手冊寫錯了

如果你想在一個模組中呼叫另一個模組的某個操作方法對應的模板(即使那個模組的控制器根本不存在),你應該這樣寫:

$this->display("/Admin_info");//顯示AdminActiion.class.php 中的info方法對應的模板檔案

是不是很坑爹?

沒太仔細去看Thinkphp核心的函式庫和類庫,總之網上的什麼T方法之類的,統統試過各種不管用。

如果你也遇到了類似的情況,不放嘗試參考筆者的寫法試試。

以上資訊為筆者實際開發中遇到的情況,對應的Thinkphp框架版本是3.1.3,如有錯誤請指正。