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 集成极光推送指北
知乎专栏:极光日报