Phalcon+
Phalcon+ — это облегчённый фреймворк на основе Zephir/C, который базируется на PhalconPHP. Мы стремимся создать комплексное решение для разработчиков Phalcon. Именно благодаря высокой гибкости Phalcon разработчики имеют слишком много вариантов выбора. Иногда обилие вариантов может привести к путанице, поэтому после того, как я прошёл через этот процесс выбора, я записал его и постепенно превратил в текущий Phalcon+. Чтобы каждый разработчик не повторял этот процесс, я решил открыть исходный код Phalcon+, чтобы все могли обмениваться опытом и учиться.
Итак, Phalcon+ не является новым фреймворком, а представляет собой отличную практику использования Phalcon, его доработку и дополнение, что позволяет разработчикам Phalcon легче начать работу и достичь высокого уровня мастерства.
Зависимости:
zephir build
(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, имеет собственную модульную систему; — Все модули имеют одинаковую структуру каталогов; — Модули имеют рабочие режимы, такие как 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").
Установка:
➜ 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]: test
Step 2 ...
...
...
Структура одного веб-модуля выглядит следующим образом:
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 Конечно, я могу помочь вам с переводом этого текста. Вот перевод на русский язык:
Конечно, можно также создать конфигурационный файл, чтобы каждый раз при запуске было удобнее.
➜ cd test ➜ touch ppm.json ➜ ../vendor/bin/ppm start -c ppm.json
Содержание ppm.json:
```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/php@7.2/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/php@7.2/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;
}
}
Мы приветствуем любые отзывы и надеемся на вашу поддержку.
Желаем всего наилучшего и успехов!
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )