Phalcon+ เป็นเฟรมเวิร์ก Zephir/C ที่มีน้ำหนักเบาตาม phalconphp เราต้องการสร้างโซลูชันขั้นตอนเดียวสำหรับนักพัฒนา Phalcon มันเป็นเพราะความยืดหยุ่นสูงมากของ Phalcon ที่ให้นักพัฒนาเลือกมากเกินไป บางครั้งมีทางแยกมากเกินไปและเป็นเรื่องง่ายที่จะหลงทางดังนั้นหลังจากที่ฉันเลือกชุดนี้ฉันก็บันทึกกระบวนการและค่อยๆพัฒนาเป็น phalcon+ปัจจุบัน เพื่อป้องกันไม่ให้นักพัฒนาทุกคนเลือกตัวเลือกเหล่านี้ซ้ำแล้วซ้ำอีกฉันก็ต้องใช้ PHALCON+ โอเพ่นซอร์สอย่างเด็ดขาดเพื่อให้ทุกคนสื่อสารและเรียนรู้
ดังนั้นโดยสรุปแล้ว 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`
Srv ให้บริการ RPC Web สามารถให้บริการที่พักผ่อนได้App::import("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
กราฟ TD
A [phalconplus bootstrap :: __ สร้าง] -> | sys :: init, initconf | A1 (superapp :: boot with env, runmode)
a1 -> | sys :: iniapp, กำหนดค่าคงที่ทั่วโลก, โมดูลแรกคือหลัก | A2 (superapp :: bootprimarymodule)
A2 -> | ตรวจสอบให้แน่ใจว่าเรามีโมดูลที่ถูกต้อง: Web/CLI/SRV | A3 (ModuleDef)
a3 -> | กำหนด superapp :: booted -> จริงทำสิ่งนี้เป็นค่าเริ่มต้น module | a4 (superapp :: registermodule ด้วย moduledef)
A4 -> | ตรวจสอบให้แน่ใจว่าโมดูลนี้ไม่ทำงานใน SuperApp :: โมดูล | A5 (โมดูลเช็คเอาต์)
A5 -> | AbstractModule :: RegisterautoLoaders/RegistERServices/RegisterEvents | A6 (Sys :: โหลด ComposerautoLoadPath)
a6 -> a7 (superapp :: handle)
a7-> | params = func_get_args, เหตุการณ์: superapp: beforeexecmodule | b1 (superapp :: defaultmodule-> exec ด้วย params)
B1 -> | เหตุการณ์: superapp: afterexecmodule | B2 (AbstractModule :: RegisterEngine)
B2 -> | เหตุการณ์: โมดูล: beforestartEngine | B3 (AbstractModule :: exec ด้วย params)
b3 -> b31 (runmode: cli) -> c1 (phalcon cli console :: handle) -> d1
B3 -> B32 (RunMode: Web)
B3 -> B33 (RunMode: SRV)
b32 -> c2 {engine web :: handler is}
c2 -> | คำขอ: guzzlehttp \ psr7 \ serverrequest | c21 (psrhandler :: handle) -> d1
C2 -> | reqeust: String | C22 (Phalcon MVC Application :: Handle) -> D1
C2 -> C23 (ยกเว้น: Handler ไม่ถูกต้อง)
b33 -> c3 {application.handler == yar?}
C3 -> | ใช่ | C31 (Yarservice :: Handle) -> D1
C3 -> | ไม่ | C32 (Simpleservice :: Handle) -> D1
D1 (เหตุการณ์: โมดูล: AfTerStartEngine) -> | เหตุการณ์: SuperApp: AfterExecModule | D2 (return)
# 下载骨架
➜ composer create-project bullsoft/fp-project fp-app
# 生成模块,假设生成的模块名为test
➜ cd fp-app
➜ ./common/bin/fp-devtool module:create
现在开始引导您创建Phalcon+模块 ...
Step 1 请输入该模块的名称,如"api"
[Enter]: test
Step 2 ...
...
...
โครงสร้างของโมดูลเว็บมีดังนี้: ทุกโหมดรวมอยู่ในโมดูลเว็บรวมถึง 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
➜ ./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 访问 ➜ 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 "
} ➜ 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 มีดังนี้:
<?php
use 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
ไฟล์กำหนดค่า
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 ;
}
}ยินดีต้อนรับข้อเสนอแนะใด ๆ และฉันหวังว่าจะได้รับการบริจาคและการสนับสนุนจากทุกคน
ฉันขอให้คุณดีที่สุดไม่มีพี่ชาย 82 :)