这是我的一个个人项目,基于Phalcon的mvc应用,拥有后台管理以及api输出的功能,暂时只有修改菜单并输出json的功能(哭)
Phalcon微信后台开发指北
基于Phalcon 4.x ,文档与3.x通用
根据Phalcon 官网教程安装Phaclon
这里是phalcon爱好者翻译的中文文档,内容翻译的也差不多了,如果看不懂官网的英文的话可以在这里学习。
安装好 Phaclon devtool后
1 2 3
| $ git clone [email protected]:JackyCZJ/phalcon-Wechat-Order.git $ cd phalcon-Wechat-Order $ composer install
|
这里引用了论坛大佬的autoload代码 如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| <?php
$loader = new \Phalcon\Loader();
$namespace = [
];
$map = require $config->application->vendorDir.'composer/autoload_namespaces.php';
foreach ($map as $k => $values) { $k = trim($k, '\\'); if (!isset($namespaces[$k])) { $dir = '/' . str_replace('\\', '/', $k) . '/'; $namespaces[$k] = implode($dir . ';', $values) . $dir; } }
$loader->registerNamespaces($namespaces);
$classMap = require $config->application->vendorDir . 'composer/autoload_classmap.php';
$loader->registerClasses($classMap);
$loader->registerDirs( [ $config->application->controllersDir, $config->application->modelsDir ] );
$loader->register();
|
特此感谢
然后找到 app/config/config.php 修改数据库信息
~phalcon migration run #迁移数据库
然后就可以跑起来了
个人觉得微信小程序自动生成的开发环境就是个弟弟,官方完全没有本地调试的doc,全靠自己摸索,要不然就要用官方的云开发环境,而云开发环境只有CI框架和node.js两个选择,完全没想过让开发者自己配置…不过毕竟是免费的,也不能要求太多
导入wafer的数据库cAuth.sql文件
不过我们其实可以把cAuth导入到我们应用的数据库然后再修改wafer2的数据库名,这样就不用弄两个数据库了
我们还要修改wafer2套件里面的config
vendor->qcloud-weapp-sdk->Conf.php
本地调试中我们主要要修改一下几个选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| private static $Mysql = [ 'host' => 'localhost', 'port' => 3306, 'user' => 'root', 'db' => 'cAuth', 'pass' => '*', 'char' => 'utf8mb4' ]; private static $QcloudAppId = *;
private static $QcloudSecretId = '*';
private static $QcloudSecretKey = '*';
private static $WxMessageToken = 'weixinmsgtoken';
|
Phalcon的代码非常的简洁明了,而且组件模块化,当你想要只想创建一个微服务而不是MVC应用的话,可以直接引用micro组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php
use Phalcon\Mvc\Micro;
$app = new Micro();
$app->get( "/say/welcome/{name}", function ($name) { echo "<h1>Welcome $name!</h1>"; } );
$app->handle();
|
就这样我们就创建了一个简单的微服务
要与微信联动,我们就需要用到wafer2的php套件,官方演示是用CI框架,(早知道一开始就用CI写了,哭泣) 个人觉得CI在开发上非常的方便,而且效率高,但是似乎没办法提供micro service?(未验证)但是phalcon是php的c拓展,虽然在跑分上比CI低,但是实际使用上,
CI比起phalcon还是有所不如,而且CI框架的官网….怎么说呢,明明CI4.0已经发布了为啥还在说最新版本为3.1.9..
这里写一下在MVC架构下,weixin的controller写法
MVC架构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| use QCloud_WeApp_SDK\Auth\LoginService as LoginService; use QCloud_WeApp_SDK\Constants as Constants; class WeixinController extends \Phalcon\Mvc\Controller {
public function indexAction() { die;
} public function LoginAction() { $result = LoginService::login(); if ($result['loginState'] === Constants::S_AUTH) { return $this->response->setJsonContent([ 'code' => 0, 'data' => $result['userinfo'] //返回用户信息 ]); } else { return $this->response->setJsonContent([ 'code' => -1, 'error' => $result['error'] //返回登陆错误信息 ]); } } public function UserAction() { $result = LoginService::check();
if ($result['loginState'] === Constants::S_AUTH) { return $this->response->setJsonContent([ 'code' => 0, 'data' => $result['userinfo'] //根据数据库中存储的登录状态判断用户是否登陆过,嘤嘤嘤 ]); } else { return $this->response->setJsonContent([ 'code' => -1, 'data' => [] ]); } } }
|
Micro Services
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| <?php
use Phalcon\Mvc\Micro; use QCloud_WeApp_SDK\Auth\LoginService as LoginService; use QCloud_WeApp_SDK\Constants as Constants;
$app = new Micro();
$app->get( "/Login", function () { $result = LoginService::login();
if ($result['loginState'] === Constants::S_AUTH) { return $this->response->setJsonContent([ 'code' => 0, 'data' => $result['userinfo'] //返回用户信息 ]); } else { return $this->response->setJsonContent([ 'code' => -1, 'error' => $result['error'] //返回登陆错误信息 ]); } }
); $app->get( "/User", function () { $result = LoginService::check();
if ($result['loginState'] === Constants::S_AUTH) { return $this->response->setJsonContent([ 'code' => 0, 'data' => $result['userinfo'] //根据数据库中存储的登录状态判断用户是否登陆过,嘤嘤嘤 ]); } else { return $this->response->setJsonContent([ 'code' => -1, 'data' => [] ]); } }
);
$app->handle(); ?>
|
然后在小程序内配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
var host = 'http://localhost';
var config = { service: { host,
loginUrl: `${host}/login`,
requestUrl: `${host}/user`, } }; module.exports = config;
|
这样子就能愉快的在本地小程序开发了
顺便一提,最好在nts版本的php7.2.8以及加载了mod_cgi的apache或者开启php-fpm的Nginx服务器上跑,不然的话在进行Ajax操作时整个框架会发生崩溃。