• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

phalconplus: phaloncplus - a framewok based on phalcon

原作者: [db:作者] 来自: 网络 收藏 邀请

Phalcon+

Phalcon+ 是一个轻量级的基于 PhalconPHP 的Zephir/C框架。我们想为Phalcon开发者构建一个一步到位的解决方案。正是因为Phalcon极高的灵活性,赋予了开发者过多的选择权。有时候路口太多容易迷失,所以当我做完这一系列选择后,我把这个过程记录了下来,并逐渐演化成了现在的Phalcon+。为了让每个开发者不重复去做这些选择,我毅然将Phalcon+开源,供大家交流和学习。

So, 总结来说,Phalcon+并不是一个全新的框架,而是对Phalcon框架的一次优秀实践,是对Phalcon框架的再次加工和补充,能让Phalcon开发者更简单地入门和精通,最后达到天人合一的最高境界。

依赖

* PHP 7.0 or above* cPhalcon 3.4.x,在官方发布3.4.6之前一定要下载此分支,通过`zephir build`手动编译phalcon - https://github.com/phalcon/cphalcon/tree/3.4.x  > 安装zephir之前,需要先安装扩展 https://github.com/phalcon/php-zephir-parser ,然后使用`composer`安装`zephir`  `composer global require phalcon/zephir`

约束

  • 不支持Phalcon的多模块结构,Phalcon+有自己的模块机制
  • 所有模块目录结构都是同构的
  • 模块是有工作模式的,如:Web, Srv, Cli等...,不同模式的模块角色不一样
  • 无论哪种模式,入口文件都完全一样
  • 内置RPC服务端和客户端
  • 所有模块都依赖全局的common(实际上是一个Phalcon+Cli模块)

MaaS & MaaL

  • MaaS(Module as a Service): Phalcon+模块即服务,Srv提供Rpc服务,Web可提供Restful服务
  • MaaL(Module as a Library): Phalcon+模块即类库,可在项目其他模块通过App::import("test")引入test模块

安装

➜ git clone https://github.com/bullsoft/phalconplus.git➜ cd phalconplus/ext/➜ /usr/bin/phpize➜ ./configure --with-php-config=/usr/bin/php-configure➜ make➜ make install

创建应用

# 下载骨架➜ composer create-project bullsoft/fp-project fp-app# 生成模块,假设生成的模块名为test➜ cd fp-app➜ ./common/bin/fp-devtool module:create现在开始引导您创建Phalcon+模块 ...Step 1 请输入该模块的名称,如"api"[Enter]: testStep 2 .........

一个Web模块的结构如下,Web模块中集成了所有的模式,包括Cli,RpcService。

test.├── app│   ├── Module.php│   ├── auth│   │   ├── AclResources.php│   │   ├── Model.php│   │   ├── Resources│   │   │   ├── Actions.php│   │   │   └── Models.php│   │   └── User.php│   ├── config│   │   └── dev.php│   ├── controllers│   │   ├── BaseController.php│   │   ├── ErrorController.php│   │   ├── IndexController.php│   │   ├── UserController.php│   │   └── apis│   │       └── DemoController.php│   ├── events│   │   ├── Acl.php│   │   ├── AppConsole.php│   │   ├── AppHandler.php│   │   ├── BackendServer.php│   │   ├── Db.php│   │   ├── EventProvider.php│   │   ├── Model.php│   │   ├── MvcDispatch.php│   │   ├── Router.php│   │   ├── SuperApp.php│   │   └── View.php│   ├── exceptions│   │   ├── EnumExceptionCode.php│   │   ├── Handler.php│   │   ├── UnknownException.php│   │   ├── UserAlreadyExistsException.php│   │   └── UserNotExistsException.php│   ├── plugins│   │   └── Volt.php│   ├── providers│   │   ├── CookieServiceProvider.php│   │   ├── CryptServiceProvider.php│   │   ├── DatabaseServiceProvider.php│   │   ├── DispatcherServiceProvider.php│   │   ├── LoggerServiceProvider.php│   │   ├── RedisServiceProvider.php│   │   ├── RouterServiceProvider.php│   │   ├── RpcServiceProvider.php│   │   ├── ServiceProvider.php│   │   ├── SessionServiceProvider.php│   │   ├── UrlServiceProvider.php│   │   └── ViewServiceProvider.php│   ├── routes│   │   ├── Api.php│   │   └── Bare.php│   └── views│       ├── error│       │   ├── show403.volt│       │   ├── show404.volt│       │   └── show500.volt│       ├── index│       │   └── index.volt│       └── index.volt├── cli│   ├── init.php│   └── tasks│       └── HelloTask.php├── public│   ├── index.php│   └── rpc.php├── src│   ├── models│   │   └── UserModel.php│   ├── protos│   │   ├── Enums│   │   │   └── UserStatus.php│   │   └── Schemas│   │       └── RegInfo.php│   └── services│       ├── BaseService.php│       └── DemoService.php└── var    └── cache

运行

使用Phalcon+DevTool

➜ ./common/bin/fp-devtool server:start test正在为您启动服务器...{    "command": "{ (php -S 0.0.0.0:8181 -t public/ .htrouter.php) <&3 3<&- 3>/dev/null & } 3<&0;pid=$!; echo $pid > /path/to/test/var/run/server.pid",    "pid": 8249,    "running": true,    "signaled": false,    "stopped": false,    "exitcode": -1,    "termsig": 0,    "stopsig": 0}... 启动成功,请使用 http://127.0.0.1:8181 访问

使用PPM

➜ cd test➜ ../vendor/bin/ppm start --bridge="PhalconPlus\\Bridge" --bootstrap="PhalconPlus\\Bootstrap" --static-directory=public/ --port=8181 --workers=2

当然也可以创建配置文件,以便每次启动更方便

➜ cd test➜ touch ppm.json➜ ../vendor/bin/ppm start -c ppm.json

ppm.json内容如下:

{    "bridge": "PhalconPlus\\Bridge",    "host": "127.0.0.1",    "port": 8181,    "workers": 2,    "app-env": "dev",    "debug": 1,    "logging": 1,    "static-directory": "public/",    "bootstrap": "PhalconPlus\\Bootstrap",    "max-requests": 1000,    "concurrent-requests": 20,    "php-cgi": "/usr/local/opt/[email protected]/bin/php"}

使用RoadRunner

➜ composer require spiral/roadrunner➜ cd test➜ touch .rr.json➜ touch psr-worker.php

.rr.json内容如下:

{  "http": {    "address": "0.0.0.0:8181",    "workers": {      "command": "/usr/local/opt/[email protected]/bin/php psr-worker.php",      "relay": "unix://rr.sock",      "pool": {        "numWorkers": 2      }    }  },  "static" : {  	"enable" : true,  	"dir": "public",  	"forbid": [".php", ".htaccess"]  }}

psr-worker.php内容如下:

<?phpuse Spiral\Goridge;use Spiral\RoadRunner;use PhalconPlus\Http\PsrResponseFactory;ini_set('display_errors', 'stderr');$app = (new PhalconPlus\Bootstrap(__DIR__))->app();$worker = new RoadRunner\Worker(    new Goridge\SocketRelay(__DIR__."/rr.sock", null, Goridge\SocketRelay::SOCK_UNIX));$psr7 = new RoadRunner\PSR7Client($worker);while ($req = $psr7->acceptRequest()) {    try {        $resp = $app->handle($req);    } catch (\Throwable $e) {        Test\Exceptions\Handler::catch($e);        $resp = $app->response();    }    $psr7->respond(PsrResponseFactory::create($resp));    $app->terminate();    unset($req, $resp);}

然后在模块目录下执行

➜ rr serve -d -v

使用Nginx

配置文件

server {      listen 8181;      server_name localhost;      access_log  /var/log/nginx/test.access.log;      index index.php index.html index.htm;      set $root_path '/home/work/wwwroot/fp-app/test/public';      root $root_path;      try_files $uri $uri/ @rewrite;      location @rewrite {          rewrite ^/(.*)$ /index.php last;      }      location ~ \.php {          fastcgi_pass unix:/run/php/php7.2-fpm.sock;          include fastcgi_params;          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;      }      location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {          root $root_path;      }      location ~ /\.ht {          deny all;      }}

反馈&支持

欢迎任何反馈,也希望得到大家的捐助支持。

祝一切顺利没八二哥 :)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap