3.2版本已經過了維護生命周期,官方已經不再維護,請及時更新至5.0版本
—— ThinkPHP 官方倉庫
以上,如果有條件,請關閉這個頁面,然后升級至 ThinkPHP 5,如果由于各種各樣的原因無法升級至 TP 5 ,請往下看。另外本指南使用環境為 Linux/Mac,若開發環境為 Windwos,則或許可能會有某些問題,如果有任何問題,歡迎在下方評論區留言討論。
參考文檔: http://www.kancloud.cn/manual/thinkphp
由于 ThinkPHP 3.2 已經支持了 Composer,因此本指南分為使用 Composer
和不使用 Composer
兩部分。
快速去看不使用 Composer 的教程
使用 Composer
ThinkPHP 3.2 已經全面支持了 Composer ,所以使用 Composer 來集成極光推送則成為首選的方式。如果不熟悉 Composer,可以去 Composer 中文網 了解詳情,本篇將不會涉及到 Composer 的安裝與使用(默認已經全局安裝了最新版本的 Composer )。
一. 獲取 ThinkPHP
在工作目錄下運行 $ composer create-project topthink/thinkphp tp-demo
二. 初次運行 ThinkPHP
$ 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(或其它應用入口文件) 模塊/控制器/操作/[參數名/參數值...]
windows 下則為:
> php.exe index.php(或其它應用入口文件) 模塊/控制器/操作/[參數名/參數值...]
在命令行下運行一下,其輸出是:
再回頭看一下 Application 目錄,可以看到自動生成了公共模塊 Common、默認的 Home 模塊和 Runtime 運行時目錄(非模塊):
三. 獲取 JPush PHP Api Client 官方插件
項目地址: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 步。
四. 配置 JPush
兩個相關問題:
不知道 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)
,個人比較喜歡二維數組,所以下面都以二維數組來示例。
五. 測試 JPush
首先習慣性的在 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 自動加載帶來的好處。
不使用 Composer
一. 獲取 ThinkPHP
官網下載(完整版): http://www.thinkphp.cn/down/framework.
從下圖可以看到不同的安裝方式其目錄結構是完全一樣的,不過要我選我肯定選擇使用 composer 安裝的方式。什么!你說你不知道什么是 Composer
二. 初次運行 ThinkPHP
$ cd thinkphp_3.2.3_full && php -S 127.0.0.1:4000
其余同上
三. 獲取 JPush PHP Api Client 官方插件
項目地址:https://github.com/jpush/jpush-api-php-client
獲取安裝文件包有兩種方式:
- 使用 git 下載最新發布的 tag 的源代碼
$ git clone -b 'v3.5.11' --single-branch --depth 1 https://github.com/jpush/jpush-api-php-client.git ThinkPHP/Library/Vendor/jpush
; - 在 項目 Release 頁面 瀏覽器下載壓縮包,解壓之后放到 ThinkPHP/Library/Vendor/ 目錄下。
注意:
這里需要注意的是使用 Composer 安裝的時候第三方包是默認放在項目根目錄下面的 vendor 目錄下,而手動下載的時候卻可以放在 ThinkPHP/Library/Vendor 目錄下。
四. 配置 JPush
同上
五. 測試 JPush
如果要加載第三方類庫,包括不符合命名規范和后綴的類庫,以及沒有使用命名空間或者命名空間和路徑不一致的類庫,或者你就是想手動加載類庫文件,我們都可以通過手動導入的方式加載。
<?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 集成極光推送指北
知乎專欄:極光日報