3.2版本已经过了维护生命周期,官方已经不再维护,请及时更新至5.0版本 ——
以上,如果有条件,请关闭这个页面,然后升级至 ThinkPHP 5,如果由于各种各样的原因无法升级至 TP 5 ,请往下看。另外本指南使用环境为 Linux/Mac,若开发环境为 Windwos,则或许可能会有某些问题,如果有任何问题,欢迎在下方评论区留言讨论。
参考文档:
由于 ThinkPHP 3.2 已经支持了 Composer,因此本指南分为使用 Composer
和不使用 Composer
两部分。
使用 Composer
ThinkPHP 3.2 已经全面支持了 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 官方插件
项目地址:
0 . 编辑项目根目录下的 composer.json 配置文件,添加 JPush 插件依赖:
"require": { "php": ">=5.3.0", "jpush/jpush": "v3.5.*"},
1 . 运行 $ composer install
or $ composer update
安装或更新插件 。 2 . 没有第 2 步。
<a id='config'>四. 配置 JPush</a>
两个相关问题:
编辑 Application/Common/Conf/config.php
文件
'your app_key', 'JPUSH_MASTER_SECRET' => 'your master_secret');
OR
array( 'APP_KEY' => 'your app_key', 'MASTER_SECRET' => 'your master_secret' ));
一维数组和二维数组的配置都可以,只是加载的时候使用不同的参数而已 C('JPUSH_APP_KEY')
or C('JPUSH.APP_KEY)
,个人比较喜欢二维数组,所以下面都以二维数组来示例。
五. 测试 JPush
首先习惯性的在 Controller 里面直接实例化 JPush 对象,然后按照官方的 demo 的一部分,进行推送测试
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';
这使得你可以很容易的使用第三方代码
所以,其正确的做法是
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
这样子做也是可行的,并且在需要使用到相关的类库的时候可以直接使用,这就是 Composer 自动加载带来的好处。
<a id='no-composer'>不使用 Composer</a>
一. 获取 ThinkPHP
官网下载(完整版): .
从下图可以看到不同的安装方式其目录结构是完全一样的,不过要我选我肯定选择使用 composer 安装的方式。
二. 初次运行 ThinkPHP
$ cd thinkphp_3.2.3_full && php -S 127.0.0.1:4000
其余同上
三. 获取 JPush PHP Api 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
; - 在 浏览器下载压缩包,解压之后放到 ThinkPHP/Library/Vendor/ 目录下。
注意:
这里需要注意的是使用 Composer 安装的时候第三方包是默认放在项目根目录下面的 vendor 目录下,而手动下载的时候却可以放在 ThinkPHP/Library/Vendor 目录下。
四. 配置 JPush
五. 测试 JPush
如果要加载第三方类库,包括不符合命名规范和后缀的类库,以及没有使用命名空间或者命名空间和路径不一致的类库,或者你就是想手动加载类库文件,我们都可以通过手动导入的方式加载。
push() ->setPlatform('all') ->addAllAudience() ->setNotificationAlert('hello tp3.2') ->send(); print_r($response); }}
六. 全局自动加载
不使用 Composer 的话,由于第三方类库不一定符合 ThinkPHP 的命名和后缀规范,所以无法做到第三方类库的全局自动加载,所以使用比较多的第三方类库 Composer 的优越性就体现出来了。
由于本人水平有限,此文难免出现一些错误或者不准确或者表达不好的地方,如有任何不对,恳请批评指正。
作者:Helperhaps - 极光
原文:
知乎专栏: