osmphp/admin

一个使用PHP 8类和属性定义数据结构,并提供完整功能的Admin面板和API的包。

v0.2.3 2022-06-27 14:09 UTC

This package is auto-updated.

Last update: 2024-09-24 02:11:39 UTC


README

Osm Admin是一个框架,用于使用PHP类定义数据库表,并具有开箱即用的用户友好型管理面板。

最终目标是让您不再担心应用程序的Admin面板细节,把所有精力都投入到真正对您的用户有用的地方。

目前,它处于积极开发中。本文档的其余部分以现在时编写,但其中大部分尚未实现。

先决条件

入门

  1. 创建项目

     composer create-project osmphp/admin-project project1
    
  2. 创建MySql数据库,例如project1。避免在名称中使用_-符号。

  3. 在项目目录中创建.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}_" 
    
  4. 安装项目。在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
    
  5. 创建并启用一个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
    
  6. 在另一个命令行窗口中,保持Gulp运行,它将在需要时清除缓存并重新构建资源

      cd project1
      gulp && gulp watch
    
  7. 定义数据类

     # src/Welcome/Product.php
     <?php
     
     namespace My\Welcome;
     
     use Osm\Admin\Schema\Record;
     
     /**
      * @property string $sku
      * @property string $description
      */
     class Product extends Record
     {
     }
    
  8. 在浏览器中打开应用程序

     http://project1.local/admin/products/
    
  9. 它应该像这个视频中所示一样工作。

工作原理

在表定义中使用PHP属性来指定属性如何存储、验证、计算以及定义它们的UI行为。

将表定义(PHP类)解析为模式 - 一组包含有关表和属性的所有信息的PHP对象。

使用差异算法检测模式更改并将其自动应用到数据库中。

query()函数使用类似于SQL的公式和当前模式以批量方式检索/修改表数据。

当数据被修改时,依赖于它的计算属性和搜索索引将被重新索引

ui_query()函数在query()函数的基础上添加了分面/搜索查询。

基于表定义,自动创建UI 网格表单。这些视图

  • 为每个表提供HTTP路由;
  • 在主菜单中注册自己;
  • 使用Laravel Blade模板和Tailwind CSS渲染;
  • 将客户端大小的行为附加到HTML元素上,使用纯JavaScript编写。

UI 控件 定义不同属性在网格和表单中的行为。

特性

  1. 在不丢失现有数据的情况下轻松更改数据结构。
  2. 每个表中都有分面导航和全文搜索。
  3. 多记录编辑。
  4. 无限数量的属性。
  5. 表类定义和数据输入验证。
  6. 可计算和可重写的属性。
  7. 表关系。
  8. 多值属性。
  9. ...等等。

贡献

安装

  1. 将项目克隆到您的计算机上。如果您没有对 osmphp/admin 仓库的写访问权限,请将项目在 GitHub 上分叉到您的账户下,并在以下命令中使用您的账户名而不是 osmphp

     cd ~/projects
     git clone git@github.com:osmphp/admin.git admin 
    
  2. 创建 MySql 数据库,例如 admin。在名称中避免使用 _- 符号。

  3. 在项目目录中,创建 .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}_" 
    
  4. 安装项目。在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
    
  5. 创建并启用一个 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
    
  6. 打开产品列表页面,http://admin.local/admin/products/

  7. 而不是使用 osm 命令行别名,使用 php bin/run.php,例如

     php bin/run.php refresh
     php bin/run.php migrate:up --fresh 
    
  8. 在另一个命令行窗口中,保持Gulp运行,它将在需要时清除缓存并重新构建资源

      cd {project_dir}
      gulp && gulp watch
    

兴趣点

在项目运行起来后,将其置于调试模式,在浏览器中尝试各种操作,并在命令行中使用 osm 命令别名。

为了更好地了解底层发生了什么,在主入口点设置断点

  • 在位于 src/Ui/Routes/Admin 目录的路线(或控制器)类的 run() 方法中。
  • 在位于 src/Schema/Commands 目录的命令行命令的 run() 方法中。

阅读框架文档

本项目基于 Osm 框架。为了更好地了解本项目是如何以及为什么这样编写的,请阅读 Osm 框架的文档

加入聊天

最后,带着所有的问题和想法,加入 Discord 上的聊天。