3.2版本已通過了維護生命週期,官方已經再也不維護,請及時更新至5.0版本
—— ThinkPHP 官方倉庫php
以上,若是有條件,請關閉這個頁面,而後升級至 ThinkPHP 5,若是因爲各類各樣的緣由沒法升級至 TP 5 ,請往下看。另外本指南使用環境爲 Linux/Mac,若開發環境爲 Windwos,則或許可能會有某些問題,若是有任何問題,歡迎在下方評論區留言討論。git
參考文檔: http://www.kancloud.cn/manual/thinkphpgithub
因爲 ThinkPHP 3.2 已經支持了 Composer,所以本指南分爲使用 Composer
和不使用 Composer
兩部分。thinkphp
ThinkPHP 3.2 已經全面支持了 Composer ,因此使用 Composer 來集成極光推送則成爲首選的方式。若是不熟悉 Composer,能夠去 Composer 中文網 瞭解詳情,本篇將不會涉及到 Composer 的安裝與使用(默認已經全局安裝了最新版本的 Composer )。windows
在工做目錄下運行 $ composer create-project topthink/thinkphp tp-demo
api
$ cd tp-demo && php -S 127.0.0.1:4000
數組
打開瀏覽器輸入地址:127.0.0.1:4000,若結果以下則說明 ThinkPHP 3.2.3 一切 OK。瀏覽器
PS:
另外 ThinkPHP 的應用支持使用命令行訪問,其訪問規則是:
$ php index.php(或其它應用入口文件) 模塊/控制器/操做/[參數名/參數值...]
app
windows 下則爲:
> php.exe index.php(或其它應用入口文件) 模塊/控制器/操做/[參數名/參數值...]
在命令行下運行一下,其輸出是:
再回頭看一下 Application 目錄,能夠看到自動生成了公共模塊 Common、默認的 Home 模塊和 Runtime 運行時目錄(非模塊):
項目地址:https://github.com/jpush/jpush-api-php-client
0 . 編輯項目根目錄下的 composer.json 配置文件,添加 JPush 插件依賴:
"require": { "php": ">=5.3.0", "jpush/jpush": "v3.5.*" },
1 . 運行 $ composer install
or $ composer update
安裝或更新插件 。
2 . 沒有第 2 步。
兩個相關問題:
不知道 app_key 和 master_secret 有什麼用
不清楚 app_key 和 master_secret 怎麼得到
編輯 Application/Common/Conf/config.php
文件
<?php return array( 'JPUSH_APP_KEY' => 'your app_key', 'JPUSH_MASTER_SECRET' => 'your master_secret' );
OR
<?php return array( 'JPUSH' => array( 'APP_KEY' => 'your app_key', 'MASTER_SECRET' => 'your master_secret' ) );
一維數組和二維數組的配置均可以,只是加載的時候使用不一樣的參數而已 C('JPUSH_APP_KEY')
or C('JPUSH.APP_KEY)
,我的比較喜歡二維數組,因此下面都以二維數組來示例。
首先習慣性的在 Controller 裏面直接實例化 JPush 對象,而後按照官方的 demo 的一部分,進行推送測試
<?php namespace Home\Controller; use Think\Controller; use JPush\Client as JPushClient; class IndexController extends Controller { public function index() { $jpush = new JPushClient(C('JPUSH.APP_KEY'), C('JPUSH.MASTER_SECRET')); $response = $jpush->push() ->setPlatform('all') ->addAllAudience() ->setNotificationAlert('hello tp3.2') ->send(); print_r($response); } }
在瀏覽器中運行一下(命令行下也是一樣的效果),
其結果天然不言而喻,相信有很多開發者都遇到過這個錯誤
那麼問題來了,這個時候到底遇到了什麼問題呢?
因爲是經過 Composer 安裝的插件,其安裝目錄並非在 ThinkPHP 的系統級 vendor 目錄下面(tp-demo/ThinkPHP/Library/Vendor
)而是在應用根目錄下面的 vendor
目錄。同時 ThinkPHP 約定全部第三方框架的類庫文件統一放到系統的 Vendor 目錄下面。因此不管是使用 import
仍是 vendor
都沒法或者說都很難去解決根目錄下類庫的自動/手動加載問題。
其實使用了 Composer 以後這就再也不是 ThinkPHP 的問題了,這就須要從 Composer 的文檔中尋求答案了:
對於庫的自動加載信息,Composer 生成了一個
vendor/autoload.php
文件。你能夠簡單的引入這個文件,你會獲得一個免費的自動加載支持。
require 'vendor/autoload.php';
這使得你能夠很容易的使用第三方代碼
因此,其正確的作法是
<?php namespace Home\Controller; require 'vendor/autoload.php'; use Think\Controller; use JPush\Client as JPushClient; class IndexController extends Controller { public function index() { $jpush = new JPushClient(C('JPUSH.APP_KEY'), C('JPUSH.MASTER_SECRET')); $response = $jpush->push() ->setPlatform('all') ->addAllAudience() ->setNotificationAlert('hello tp3.2') ->send(); print_r($response); } }
只須要再添加一行(注意上面代碼的第 2 行 require 'vendor/autoload.php';
),而後在命令行運行一下:
若是結果出現相似於 Errorcode 1011:cannot find user by this audience
的問題,那麼恭喜你,你的集成是成功的,可是有一個小小的問題,相關解決方法請參見極光社區的相關帖子
能夠看到在這個類中使用了 JPush 的部分功能,因此是須要在類的上面 require 'vendor/autoload.php';
,那麼一樣的若是須要使用七牛提供的服務呢?
若是是一樣使用 Composer 安裝的七牛的 SDk ,那麼什麼都不用管(由於 vendor/autoload.php
這個文件裏面已經在安裝七牛的時候加載了七牛的類庫),直接跟着 use 語句:
use Qiniu\Storage\UploadManager; use Qiniu\Auth;
若是是在另外一個 Controller 類中使用極光推送服務呢?
require 'vendor/autoload.php';
這個在相應的 Controller 中是必須的。
可是能夠在應用入口文件處添加 require 'vendor/autoload.php';
這樣就能夠全局自動加載 Composer 安裝的第三方類庫,而後就能夠刪除全部其餘地方的 require 'vendor/autoload.php';
也就是說
// 文件:tp-demo/index.php ... // 定義應用目錄 define('APP_PATH', './Application/'); require 'vendor/autoload.php'; // 注意位置必定要在 引入ThinkPHP入口文件 以前 // 引入ThinkPHP入口文件 require './ThinkPHP/ThinkPHP.php'; // 親^_^ 後面不須要任何代碼了 就是如此簡單
// 文件:tp-demo/Application/Home/Controller/IndexController.class.php <?php namespace Home\Controller; // require 'vendor/autoload.php'; 此行刪除 use Think\Controller; use JPush\Client as JPushClient; ...
這樣子作也是可行的,而且在須要使用到相關的類庫的時候能夠直接使用,這就是 Composer 自動加載帶來的好處。
官網下載(完整版): http://www.thinkphp.cn/down/framework.
從下圖能夠看到不一樣的安裝方式其目錄結構是徹底同樣的,不過要我選我確定選擇使用 composer 安裝的方式。什麼!你說你不知道什麼是 Composer
$ cd thinkphp_3.2.3_full && php -S 127.0.0.1:4000
其他同上
項目地址:https://github.com/jpush/jpush-api-php-client
獲取安裝文件包有兩種方式:
$ git clone -b 'v3.5.11' --single-branch --depth 1 https://github.com/jpush/jpush-api-php-client.git ThinkPHP/Library/Vendor/jpush
;這裏須要注意的是使用 Composer 安裝的時候第三方包是默認放在項目根目錄下面的 vendor 目錄下,而手動下載的時候卻能夠放在 ThinkPHP/Library/Vendor 目錄下。
若是要加載第三方類庫,包括不符合命名規範和後綴的類庫,以及沒有使用命名空間或者命名空間和路徑不一致的類庫,或者你就是想手動加載類庫文件,咱們均可以經過手動導入的方式加載。
<?php namespace Home\Controller; Vendor('jpush.autoload'); use JPush\Client as JPushClient; use Think\Controller; class IndexController extends Controller { public function index() { $jpush = new JPushClient(C('JPUSH.APP_KEY'), C('JPUSH.MASTER_SECRET')); $response = $jpush->push() ->setPlatform('all') ->addAllAudience() ->setNotificationAlert('hello tp3.2') ->send(); print_r($response); } }
不使用 Composer 的話,因爲第三方類庫不必定符合 ThinkPHP 的命名和後綴規範,因此沒法作到第三方類庫的全局自動加載,因此使用比較多的第三方類庫 Composer 的優越性就體現出來了。
做者:Helperhaps - 極光
原文:ThinkPHP 3.2.x 集成極光推送指北
知乎專欄:極光日報