osmphp / admin
一个使用PHP 8类和属性定义数据结构,并提供完整功能的Admin面板和API的包。
Requires
- php: >=8.1
- doctrine/dbal: ^3.3
- osmphp/extras: ^0.1
- osmphp/framework: ^0.15
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-24 02:11:39 UTC
README
Osm Admin是一个框架,用于使用PHP类定义数据库表,并具有开箱即用的用户友好型管理面板。
最终目标是让您不再担心应用程序的Admin面板细节,把所有精力都投入到真正对您的用户有用的地方。
目前,它处于积极开发中。本文档的其余部分以现在时编写,但其中大部分尚未实现。
先决条件
- PHP 8.1或更高版本,并启用
curl
、fileinfo
、intl
、mbstring
、openssl
、pdo_mysql
、pdo_sqlite
、sqlite3
扩展 - MySql 8.0或更高版本
- Node.js,最新LTS版本
- Gulp 4命令行工具
- ElasticSearch 7.14或更高版本
- Osm Framework命令行别名
入门
-
创建项目
composer create-project osmphp/admin-project project1
-
创建MySql数据库,例如
project1
。避免在名称中使用_
和-
符号。 -
在项目目录中创建
.env.Osm_App
文件。在Linux上,使用bin/create-env.sh
命令从模板创建它NAME=... # same as MySql database name #PRODUCTION=true MYSQL_DATABASE="${NAME}" MYSQL_USERNAME=... MYSQL_PASSWORD=... SEARCH_INDEX_PREFIX="${NAME}_"
-
安装项目。在Linux上,在项目目录中运行
bin/install.sh
。在其他平台上,运行以下命令# go to project directory cd project1 # compile the applications osmc Osm_Admin_Samples osmc Osm_Project osmc Osm_Tools # collect JS dependencies from all installed modules osmt config:npm # install JS dependencies npm install # build JS, CSS and other assets gulp # make `temp` directory writable find temp -type d -exec chmod 777 {} \; find temp -type f -exec chmod 666 {} \; # create tables in the MySql database osm migrate:up --fresh
-
创建并启用一个Nginx虚拟主机,例如,
project1.local
。osmt config:nginx --prevent_network_access sudo php vendor/osmphp/framework/bin/tools.php config:host sudo php vendor/osmphp/framework/bin/tools.php install:nginx
-
在另一个命令行窗口中,保持Gulp运行,它将在需要时清除缓存并重新构建资源
cd project1 gulp && gulp watch
-
定义数据类
# src/Welcome/Product.php <?php namespace My\Welcome; use Osm\Admin\Schema\Record; /** * @property string $sku * @property string $description */ class Product extends Record { }
-
在浏览器中打开应用程序
http://project1.local/admin/products/
-
它应该像这个视频中所示一样工作。
工作原理
在表定义中使用PHP属性来指定属性如何存储、验证、计算以及定义它们的UI行为。
将表定义(PHP类)解析为模式 - 一组包含有关表和属性的所有信息的PHP对象。
使用差异算法检测模式更改并将其自动应用到数据库中。
query()
函数使用类似于SQL的公式和当前模式以批量方式检索/修改表数据。
当数据被修改时,依赖于它的计算属性和搜索索引将被重新索引。
ui_query()
函数在query()
函数的基础上添加了分面/搜索查询。
基于表定义,自动创建UI 网格 和 表单。这些视图
- 为每个表提供HTTP路由;
- 在主菜单中注册自己;
- 使用Laravel Blade模板和Tailwind CSS渲染;
- 将客户端大小的行为附加到HTML元素上,使用纯JavaScript编写。
UI 控件 定义不同属性在网格和表单中的行为。
特性
- 在不丢失现有数据的情况下轻松更改数据结构。
- 每个表中都有分面导航和全文搜索。
- 多记录编辑。
- 无限数量的属性。
- 表类定义和数据输入验证。
- 可计算和可重写的属性。
- 表关系。
- 多值属性。
- ...等等。
贡献
安装
-
将项目克隆到您的计算机上。如果您没有对
osmphp/admin
仓库的写访问权限,请将项目在 GitHub 上分叉到您的账户下,并在以下命令中使用您的账户名而不是osmphp
cd ~/projects git clone git@github.com:osmphp/admin.git admin
-
创建 MySql 数据库,例如
admin
。在名称中避免使用_
和-
符号。 -
在项目目录中,创建
.env.Osm_Admin_Samples
文件。在 Linux 上,使用bin/create-env.sh
命令从模板创建它NAME=... # same as MySql database name #PRODUCTION=true MYSQL_DATABASE="${NAME}" MYSQL_USERNAME=... MYSQL_PASSWORD=... SEARCH_INDEX_PREFIX="${NAME}_"
-
安装项目。在Linux上,在项目目录中运行
bin/install.sh
。在其他平台上,运行以下命令# go to project directory cd admin # install dependencies composer install # compile the applications osmc Osm_Admin_Samples osmc Osm_Project osmc Osm_Tools # collect JS dependencies from all installed modules osmt config:npm # install JS dependencies npm install # build JS, CSS and other assets gulp # make `temp` directory writable find temp -type d -exec chmod 777 {} \; find temp -type f -exec chmod 666 {} \; # create tables in the MySql database php bin/run.php migrate:up --fresh
-
创建并启用一个 Nginx 虚拟主机,例如,
admin.local
。使用以下命令。在osmt config:nginx
命令中,考虑添加--prevent_network_access
标志,使网站仅可在您的计算机上访问,而不是周围的其他计算机osmt config:nginx --app=Osm_Admin_Samples --prevent_network_access sudo php vendor/osmphp/framework/bin/tools.php \ config:host --app=Osm_Admin_Samples sudo php vendor/osmphp/framework/bin/tools.php \ install:nginx --app=Osm_Admin_Samples
-
打开产品列表页面,http://admin.local/admin/products/。
-
而不是使用
osm
命令行别名,使用php bin/run.php
,例如php bin/run.php refresh php bin/run.php migrate:up --fresh
-
在另一个命令行窗口中,保持Gulp运行,它将在需要时清除缓存并重新构建资源
cd {project_dir} gulp && gulp watch
兴趣点
在项目运行起来后,将其置于调试模式,在浏览器中尝试各种操作,并在命令行中使用 osm
命令别名。
为了更好地了解底层发生了什么,在主入口点设置断点
- 在位于
src/Ui/Routes/Admin
目录的路线(或控制器)类的run()
方法中。 - 在位于
src/Schema/Commands
目录的命令行命令的run()
方法中。
阅读框架文档
本项目基于 Osm 框架。为了更好地了解本项目是如何以及为什么这样编写的,请阅读 Osm 框架的文档。
加入聊天
最后,带着所有的问题和想法,加入 Discord 上的聊天。