yii constant.php,yii2.0+protobuf3.0开发

目前有个项目使用yii2.0+protobuf3.0进行开发,如何能让protoc生成的类文件能自动加载呢。

step1. 编写 proto 文件:

$ cd web-server

$ mkdir Proto

$ cd Proto

$ vim usersvr.proto

syntax = "proto3";

package proto.message.usersvr; // protoc 自动生成 Proto/Message/Usersvr 目录,目录首字母大写

// 获取用户信息

message GetUserInfo {

int32 errcode = 1;

string errmsg = 2;

}

step2. 生成 protobuf php 文件

$ cd web-server/Proto

$ protoc --php_out=../ user.proto

这样在项目的根目录 web-server 下就生成了 GPBMetadata 和 Proto/Message/Usersvr 两个目录,而且这两个目录里的文件的 namespace 和目录结构都是一一对应的,分别是:namespace GPBMetadata; 和 namespace Proto\Message\Usersvr;,php 的 namespace 和目录结构不需要一致,不过最好保持一致。

step3. 自动引入刚刚生成的 protobuf php 文件

因为我是模块化开发,新建了 usersvr 模块,所以可以在 modules/usersvr/Modules.php 文件里加上 autoload 自动引用刚刚生成的 protobuf php 文件,这样 usersvr 模块下的所有文件就不用手动去引用这些文件了,直接使用就可以了:

$ vim web-server/modules/usersvr/Module.php // 模块文件

namespace app\modules\usersvr;

// 引入常量文件

require_once __DIR__ . '/../../constants/constant.php';

// 自动引入proto文件

spl_autoload_register(function ($className) {

if(strpos($className, 'Proto') !== false || strpos($className, 'GPBMetadata') !== false) { // Proto或GPBMetadata开头

$className = str_replace("\\","/", $className);

require_once __DIR__ . '/../../'.$className.'.php';

}

});

class Module extends \yii\base\Module

{

public function init()

{

parent::init();

}

}

step4. 开始使用刚刚生成的 protobuf php 文件

自动引入以后,在 modules/usersvr/controllers 里就可以使用 protobuf php 文件里的类了:

$ vim web-server/modules/usersvr/controllers/UserController.php

namespace app\modules\usersvr\controllers;

// 获取用户信息

public function actionGetuserinfo()

{

// 调用 protobuf php 文件里的类 GetUserInfo

$msg = new \Proto\Message\Usersvr\GetUserInfo(); // namespace 和文件所在目录结构是一致的

$msg->setErrcode(500); // 设置 errcode

$msg->setErrmsg('没有数据'); // 设置 errmsg

// 输出

echo $msg->serializeToString();

return;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值