一般剛接觸tp5.1的,會很不適應,雖然版本號只是比5.0多了0.1,但是差別挺大,廢棄了不少方法,官方的教程又很簡單,很多東西沒說全,在此鄙視一下框架作者,最起碼體諒一下小白嘛,搞了好多天才把5.1使用vendor里面引入第三方包的問題搞好,慘啊,在此分享,讓后來的小白別走太多彎路。
一、在thinkPHP 5.1.X新版取消了Loader::import方法以及import和vendor助手函數,推薦全面采用命名空間方式的類以及自動加載機制,如果必須使用請直接改為php內置的include或者require語法。(抱怨一下,這種問題要在官方文檔里面說明一下嘛,鄙視作者,整5.1的時候這些方法挨個試了一遍,又是搜又是看教程結果全部卵用,無奈。)
原來的import("Vendor.Classes.PHPExcel.IOFactory");或Vendor('phpoffice.phpexcel.Classes.PHPExcel.IOFactory');方法已經不再使用。
二,在thinkPHP 5.1.X中的處理方法,必須使用composer方式安裝第三方模塊。否則在vendor目錄下的內容無法自動加載。也就是到了這一版必須用Composer,方法加載去掉了,其實這樣也好,比較靠攏主流框架,比如laravel,如果用好TP5.1在轉向laravel很容易,而且用工具管理包,也符合現在的開發潮流,像node各種工具包管理,在此雖然剛接觸很不爽,但是支持吧。
怎么安裝Composer 就不說了,教程一堆,反正不成功再搜再搞,就差不多了。
三,是否能夠成功在TP5.1中引入第三方包,命名空間太重要了,必須明白到底是咋回事,單單明白namespace還不行,use的用法和規則也缺一不可,我當時就只了解了namespace,什么大空間,子空間,依然不成功,是因為use用的不對。
四,說了require_once加namespace方式,接下來說namespace和use 方式。
第三方包
namespace gmars\rbac; use gmars\nestedsets\NestedSets; use think\Db; use think\Exception; class Rbac { /**
-------------------------下面自己寫的類,上面是rbac包類----------------------------------------------------
namespace app\index\Controller; use gmars\rbac; //use的是第三方包的namespace名字 class Login extends Controller { public function login(){ //實例化 $rbacObj=new rbac\Rbac(); //就是use的名字最后一個字符rbac 加上你要實例化的類名。
五,這里還要說一下composer,如果你項目有報錯,找不到包什么的可以去看項目跟目錄里面的composer.json這里是你導入第三方類的表,看看有沒有這個包在里面
"require": { "php": ">=5.6.0", "topthink/framework": "5.1.*", "gmars/tp5-rbac":"dev-master", "gmars/tp5-nestedsets": "dev-master", "topthink/think-captcha": "^2.0", "topthink/think-migration":"^1.0", "phpmailer/phpmailer": "^6.0" },
在此也就是說在TP5.1中,導入第三方包在vendor文件夾中,先用compose require 加包成功,再先use對,在new,才能成功,在前面不聲明use是不能加載第三方包的,還有一路就是進vendor文件夾中找到你加包的文件夾,里面src里面php文件.拷貝到extend文件下新建文件夾中,統一管理也可以,有一個開發者就是這樣干,不用use 直接反斜杠\ 新建文件夾\你要的類,但是為了清楚明白還是use比較好。
在你composer require tp5-rbac 出現下載進度,就說明在安裝中,如果沒有有錯誤信息,就直接在compose.json文件中require大括號里面手動加上 "gmars/tp5-rbac":"dev-master", 然后命令composer update ,就會安裝了,這個很多教程都有說,其實用composer剛開始覺得挺高大上,其實就是json文件,composer里php類,運用php自動加載類的機制實現的,沒什么太魔幻的。正確使用namespace和use后,就很方便了。
原文鏈接:https://blog.csdn.net/qq_18248719/article/details/81805310