Phalcon+ adalah kerangka Zephir/C yang ringan berdasarkan phalconphp. Kami ingin membangun solusi satu langkah untuk pengembang Phalcon. Justru karena fleksibilitas Phalcon yang sangat tinggi yang memberi pengembang terlalu banyak pilihan. Kadang -kadang ada terlalu banyak persimpangan dan mudah tersesat, jadi setelah saya membuat serangkaian pilihan ini, saya merekam proses dan secara bertahap berevolusi menjadi Phalcon+saat ini. Untuk mencegah setiap pengembang membuat pilihan -pilihan ini berulang kali, saya dengan tegas phalcon open source+ untuk semua orang berkomunikasi dan belajar.
Jadi, lebih dari itu, Phalcon+ bukanlah kerangka kerja baru, tetapi praktik yang sangat baik dari kerangka phalcon. Ini adalah pemrosesan ulang dan suplemen untuk kerangka phalcon. Ini dapat memungkinkan pengembang Phalcon untuk memulai dan menguasainya dengan lebih mudah, dan akhirnya mencapai tingkat persatuan tertinggi antara manusia dan alam.
* 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 Menyediakan Layanan RPC, Web dapat menyediakan layanan yang tenangApp::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
grafik td
A [phalconplus bootstrap :: __ konstruk] -> | sys :: init, initconf | A1 (SuperApp :: Boot with Env, RunMode)
A1 -> | sys :: iniApp, tentukan konstanta global, modul pertama adalah primer | A2 (SuperApp :: BootPrimaryModule)
A2 -> | Pastikan kami memiliki modul yang valid: Web/CLI/SRV | A3 (Moduledef)
A3 -> | Tetapkan SuperApp :: Booted -> True, Jadikan ini A DefaultModule | A4 (SuperApp :: RegisterModule dengan Moduledef)
A4 -> | Pastikan modul ini tidak berjalan di SuperApp :: Modules | A5 (Modul Checkout)
A5 -> | AbstractModule :: RegisterAutoloaders/RegisterServices/RegisterEvents | A6 (Sys :: Load Composerautoloadpath)
A6 -> A7 (SuperApp :: Handle)
A7-> | params = func_get_args, acara: superapp: beforeexecmodule | b1 (superapp :: defaultModule-> exec dengan params)
B1 -> | Acara: SuperApp: Afterexecmodule | B2 (AbstractModule :: RegisterEngine)
B2 -> | Acara: Modul: BeforestArtEngine | B3 (AbstractModule :: Exec dengan Params)
B3 -> B31 (RunMode: CLI) -> C1 (Phalcon Cli Console :: Handle) -> D1
B3 -> B32 (RunMode: Web)
B3 -> B33 (RunMode: SRV)
B32 -> c2 {engine web :: handler}
C2 -> | Permintaan: GuzzleHttp \ psr7 \ ServerRequest | C21 (psrHandler :: handle) -> d1
C2 -> | reqeust: string | c22 (phalcon mvc application :: handle) -> d1
C2 -> C23 (pengecualian: pawang tidak valid)
B33 -> c3 {application.handler == yar?}
C3 -> | Ya | C31 (Yarservice :: Handle) -> D1
C3 -> | Tidak | C32 (Simpleservice :: Handle) -> D1
D1 (Acara: Modul: AfterStartEngine) -> | Acara: SuperApp: Afterexecmodule | D2 (kembali)
# 下载骨架
➜ 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 ...
...
...
Struktur modul web adalah sebagai berikut: Semua mode terintegrasi dalam modul web, termasuk CLI dan 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
Tentu saja, Anda juga dapat membuat file konfigurasi agar lebih mudah memulai setiap kali
➜ cd test
➜ touch ppm.json
➜ ../vendor/bin/ppm start -c ppm.json
Konten ppm.json adalah sebagai berikut:
{
"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
Isi .rr.json adalah sebagai berikut:
{
"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 " ]
}
}Isi PSR-Worker.php adalah sebagai berikut:
<?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 );
}Kemudian jalankan di direktori modul
➜ rr serve -d -v
File konfigurasi
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 ;
}
}Umpan balik apa pun diterima dan saya berharap dapat menerima sumbangan dan dukungan dari semua orang.
Saya berharap yang terbaik untuk Anda, tidak ada saudara 82 :)