not-empty/ala-microframework-php
Composer 安装命令:
composer create-project not-empty/ala-microframework-php
包简介
API Rest based in lumen using query builder that auto generate base code for simple crud (with automatic generated 100% unit and feature tests). To be used as a simple and fast way to implement microservices architecture
README 文档
README
API Rest based in lumen using query builder that auto generate base code for simple crud (with automatic generated 100% unit and feature tests).
Release 7.0.0 Requires PHP 8.3
Release 6.0.0 Requires PHP 8.2
Release 5.0.0 Requires PHP 8.1
Release 4.0.0 Requires PHP 7.4
Release 3.0.0 Requires PHP 7.3
Release 2.0.0 Requires PHP 7.2
Release 1.0.0 Requires PHP 7.1
Installation
composer create-project and enter in the created folder (you can fork or clone the repository if you want to)
composer create-project not-empty/ala-microframework-php your_project_name
(optional) Stop all other containers to avoid conflict.
docker stop $(docker ps -q)
Start project with Docker using compose tool.
docker-compose up -d
Access the container
docker exec -it ala-php bash
Run Composer to install all dependencies.
composer install --prefer-dist
Ensure the composer install create the cache folders and give then permissions in ./storage, if don't you'll have to create and give permitions yourself:
mkdir storage/framework \ && mkdir storage/framework/cache \ && mkdir storage/framework/cache/data \ && mkdir storage/framework/sessions \ && mkdir storage/framework/views \ && chmod -R 777 ./storage
To check the build for this project look at ./ops/docker/dev folder.
Copy and modify the .env file
cp .env.example .env
Include values for APP_KEY and JWT_APP_SECRET, we strongly recommend a 26 to 32 length random string (can be a ulid)
You can use /health/key uri to generate this keys.
Now you can access the health-check http://localhost:8101 and get a json response like this:
{
"status": "online",
"version": "0.0.1"
}
Creating your automatic crud domain
For create your brand new domain with a complete crud use the command:
php artisan create:domain {your_domain}
This command will create a folder in app/Domains, new files in routes, database/migrations and database/seeds folder with all base code including all the units and feature tests.
If your domain name has 2 words use underline (_) to separate.
Configuring your new Domain
- Configure your migration file in
database/migrationswith all your fields and indexes - Open your domain and configure your fields and the order in
app/Domains/{your_domain}/Http/Parameters - Your validator rules can be configured in
app/Domains/{your_domain}/Http/Validators - You can modify or add more business rule in
app/Domains/{your_domain}/Businesses - Or your routes in
bootstrap/{your_domain}_routesfolder
Running your Migration
- Once you have configured your migration file in
database/migrations; - Run the migration
php artisan migration
Requests samples
Within the /ops/requests folder, you'll discover a collection of sample requests showcasing.
Requests have been meticulously documented in three different formats for your convenience:
- Postman Collections
Files: postman_collection.json and postman_environments.json
Tool: Postman
These collections provide a comprehensive overview of the available API requests. Import them into Postman to explore and execute requests seamlessly.
- Visual Studio Code (VSCode) REST Client Extension:
File: requests.http
Extension: REST Client
With the extension installed in VSCode open the requests.http file. This extension allows you to send HTTP requests directly from your code editor, making it easy to interact with the API.
- CURL Commands:
File: requests.curl
For those who prefer the command line, CURL commands are provided in the requests.curl file. Execute these commands in your terminal to interact with the API using the widely-used CURL tool.
Choose the documentation format that aligns with your preferred workflow and start seamlessly interacting with the API.
Ulid
For primary key value, this project using Ulid value, but you can pass other pattern in insert route if you prefer.
JWT
In auth route this projet use JWT lib. This token will be generate if your secret, token and context is correct. This configuration is the token.php file in app/config/ folder.
We strongly advise you to change these values, they can be either random strings, ulids or any string that you like.
We use to generate then by encrypting an ulid v4 with SHA512/256.
We recommend creating diferents tokens from diferents sources.
return [ 'data' => [ '32c5a206ee876f4c6e1c483457561dbed02a531a89b380c3298bb131a844ac3c' => [ // default token 'name' => 'app-test', // default context 'secret' => 'a1c5930d778e632c6684945ca15bcf3c752d17502d4cfbd1184024be6de14540', // default secret ], ], ];
Request Service
To make request between two or more services, this project use Request Service lib.
Response
The pattern used to return all request is json and the layout is configure in your Response lib.
Custom Validators
I you want to implement custom validators you can use the regex function and add you regex to the patterns file /app/Constants/PatternsConstants.php and then just use anywhere but dont forget to declare the class for use:
use App\Constants\PatternsConstants;
Filters
Follow this steps to configure a new field to accepted a filter in list route
- In your domain validators list file
app/Domains/{your_domain}/Http/Validators/{your_domain}ListValidatoryou can change or add more filters options.
For example, to add a filter to age field just include a new entry like that
/** * get rules for this request * @return array */ public function getRules() : array { return [ 'class' => 'string|in:"asc","desc"', 'fields' => 'string', 'order' => 'string', 'page' => 'integer|min:1', 'filter_name' => [ 'string', 'regex:'.PatternsConstants::FILTER, ], // here your new filter 'filter_age' => [ 'string', 'regex:'.PatternsConstants::FILTER, ], ]; }
After that, you need to configure your filters in app/Domains/{your_domain}/Filters.
you can user various patterns like FILTER_EQUAL, FILTER_NOT_EQUAL, etc.
Check all types look at FiltersTypesConstants class in app/Constants.
/** * set filter rules for this domain */ public $filter = [ 'age' => [ 'validate' => 'integer|min:18|max:99', 'permissions' => [ FiltersTypesConstants::FILTER_EQUAL, FiltersTypesConstants::FILTER_NOT_EQUAL, ], ], 'created' => [ 'validate' => 'date', 'permissions' => [ FiltersTypesConstants::FILTER_LESS_THAN, FiltersTypesConstants::FILTER_GREATER_THAN, FiltersTypesConstants::FILTER_GREATER_THAN_OR_EQUAL, FiltersTypesConstants::FILTER_LESS_THAN_OR_EQUAL, ], ], 'modified' => [ 'validate' => 'date', 'permissions' => [ FiltersTypesConstants::FILTER_LESS_THAN, FiltersTypesConstants::FILTER_GREATER_THAN, FiltersTypesConstants::FILTER_GREATER_THAN_OR_EQUAL, FiltersTypesConstants::FILTER_LESS_THAN_OR_EQUAL, ], ], ];
After that you can send this param in url query, for example:
/{your_domain}/list?filter_name=lik,vitor OR /{your_domain}/list?filter_name=eql,vitor.
Recomendations
Use this project with MySql with no relationship keys and NOT use JOIN.
Production
Don't forget to change APP_ENV to production value. This enable the op_cache PHP extension, so dont use in development environment.
The production docker is located in ops/docker/prod and you can change the Nginx config or PHP all the way you want.
Development
Want to contribute? Great!
Make a change and be careful with your updates! Any new code will only be accepted with all validations.
To ensure that the entire project is fine:
First install the dependences (with development ones)
composer install --dev --prefer-dist
Second run all validations
composer checkall
You can run all validations plus test coverage metrics
composer checkallcover
Code Quality
We create this project under stricts good pratices rules. Bellow you can see some composer commands to validate the framework code and your code as well.
We recommend you aways run the composer checkallcover command to validate all your code, tests and coverage.
lint - check for sintax errors on PHP (PHP Lint)
composer lint
cs - check for smells in general (Code Snifer)
composer cs
mess - check for smells in a more deep way (Mess Detector)
composer mess
test - run all tests (Unit and Feature)
composer test
test-cover - run all tests with code coverage (Unit and Feature)
composer test-cover
test-unit - run all unit tests
composer test-unit
test-unit-cover - run all unit tests with code coverage
composer test-unit-cover
test-feat - run all feature tests
composer test-feat
test-feat-cover - run all feature tests with code coverage
composer test-feat-cover
ccu - check unit coverage level (100% is required)
composer ccu
ccf - check feature coverage level (100% is required)
composer ccf
check - execute lint, cs, mess and unit tests
composer check
checkcover - execute lint, cs, mess and unit tests with coverage
composer check
checkall - execute lint, cs, mess, unit and feature tests
composer check
checkall - execute lint, cs, mess, unit and feature tests with coverage
composer check
#Sonarqube
This project is also validated with Sonarqube, has a sonar-project.properties file to support sonarqube execution.
To do that, edit the sonar-project.properties with your sonar url (maybe something like http://192.168.0.2:9900 if you running sonar in your machine), and then execute sonar scan.
Automatic Validation Before Commit
If you want to force the checkallcover in your project before commit, you can just copy the file ops/contrib/pre-commit to your .git/hook. Be aware your development environment will need to have PHP with xdebug installed in order to commit.
cp ops/contrib/pre-commit .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
Random Seed Data
You can create an automatic seeder to generate data using you add endpoint to tests purposes (or any other purpose you like).
To do that you must create a random seeder with the command:
php artisan random:create {domain_name}
It will create a file inside app/Seeds/ with your domain name with all possibilities.
You may change to fullfill your needs (and your domain validations)
Now you may configure on .env the SEED_URLand SEED_PORT environments. (if you want to run inside docker don't change at all).
And run your seed with the domain name and the amount to records to generate.
php artisan random:seed {domain_name} {number_of_records}
Then use the list endpoint, or make a select in database to see the results.
Not Empty Foundation - Free codes, full minds
not-empty/ala-microframework-php 适用场景与选型建议
not-empty/ala-microframework-php 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 12 次下载、GitHub Stars 达 25, 最近一次更新时间为 2023 年 11 月 15 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「microframework」 「php」 「crud」 「laravel」 「lumen」 「code-generation」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 not-empty/ala-microframework-php 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 not-empty/ala-microframework-php 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 not-empty/ala-microframework-php 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Gii Generator for double model generation
A PSR-7 compatible library for making CRUD API endpoints
A lightweight, secure-by-default PHP microframework built on Slim – providing Laravel-like features (ORM, authentication, migrations, caching) without the bloat. Perfect for building REST APIs and small-to-medium PHP applications.
Admin panel generator for Laravel 8 and based on Vuetify Admin, a separate SPA admin framework running on top of REST APIs.
Collection of tools to use the full power of the Enyalius framework
Laravel Admin CRUD Generator
统计信息
- 总下载量: 12
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 25
- 点击次数: 29
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: GPL-3.0-only
- 更新时间: 2023-11-15
