jalexmelendez/citadel-framework

此包已被弃用且不再维护。未建议替代包。

这是一个基于Symfony和Mercure构建的强大和实时Web应用程序/API(REST/GraphQL)的CoC和易于部署的框架。

v1.0.3-alpha 2022-08-16 13:31 UTC

This package is auto-updated.

Last update: 2023-04-16 15:00:29 UTC


README

这是一个基于Symfony和Mercure构建的强大和实时Web应用程序/API(REST/GraphQL)的CoC和易于部署的框架。

版本

  • 预_alpha: 此版本目前正在开发中,在Rurusi和Cut开发中用于生产。

框架的部分

此框架旨在作为一种简单的方式创建具有现代开发者所需所有功能的单体应用程序,您可以自由地使用它以创纪录的时间制作MVP。

管理面板

此框架包含EasyAdmin,这是一种用于创建管理后端的先进工具,仅供具有管理员角色的用户访问。

Easyadmin文档

在哪里修改?

路由和角色配置位于config/packages/security.yaml

    # Easy way to control access for large sections of your site
    # Note: Only the *first* access control that matches will be used
    access_control:
        # YOU CAN ADD AS MUCH FILTERS AS YOU WANT.
        #- { path: ^/route, roles: [ROLE_USER] }
        - { path: ^/admin, roles: [ROLE_SUPER_ADMIN, ROLE_ADMIN] }
        - { path: ^/dashboard, roles: [ROLE_STAFF, ROLE_USER] }

TailwindCSS和daisyUI作为默认CSS框架

TailwindCSS和daisyUI已安装在此发行版中,以加快创建界面的过程,您可以在tailwind.config.js、postcss.config.js和webpack.config.js中找到配置。

前端资源编译器(Webpack Encore)

登录和认证

Web应用程序

默认的登录凭证为电子邮件和密码,默认用户模型默认启用了电子邮件和用户名,要默认更改登录动态,您可以使用用户名或电子邮件更改此字段以允许用户登录。

登录页面的默认路由为"/login",登录成功后,具有"ROLE_SUPER_ADMIN"和"ROLE_ADMIN"角色的用户将被重定向到管理仪表板,其他角色将被重定向到"/dashboard"。

    #config/packages/security.yaml

    providers:
        # used to reload user from session & other features (e.g. switch_user)
        app_user_provider:
            entity:
                class: App\Entity\User
                property: email

要更改登录路由,您可以修改此配置

    #config/packages/security.yaml

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            lazy: true
            provider: app_user_provider
            form_login:
                login_path: login
                check_path: login
                enable_csrf: true
            logout:
                path: logout

您可以在以下位置找到登录控制器:

REST API和GraphQL需要通过Web认证才能访问文档

默认情况下,考虑到可扩展性,默认认证机制是使用JSON Web Token (JWT),根据维基百科,为了简化,它是一个基于JSON的开放标准(RFC 7519),用于创建声明某些数量的访问令牌。

首先您需要在您的应用程序上登录,然后您可以转到'/api'以读取openapi文档,要编辑配置,您可以修改此文件的这些部分。

要使用JWT进行认证,首先您需要在'/api/authentication_token'处获取令牌,提交如下post请求或使用OpenAPI部分生成它。

#Curl

curl -X 'POST' \
  'https://:8000/api/authentication_token' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "email": "johndoe@example.com",
  "password": "apassword"
}'

#Request URL

https://:8000/api/authentication_token
# config/packages/api_platform.yaml

api_platform:
    mapping:
        paths: ['%kernel.project_dir%/src/Entity']
    patch_formats:
        json: ['application/merge-patch+json']
    swagger:
        versions: [3]
        api_keys:
             apiKey:
                name: Authorization
                type: header
# config/packages/lexik_jwt_authentication.yaml
lexik_jwt_authentication:
    secret_key: '%env(resolve:JWT_SECRET_KEY)%'
    public_key: '%env(resolve:JWT_PUBLIC_KEY)%'
    pass_phrase: '%env(JWT_PASSPHRASE)%'
    token_ttl: 3600
    user_identity_field: email
# config/services.yaml

security:
    # #
    ##
    firewalls:
        dev:
            ##
            ##
        api:
            pattern: ^/api/
            stateless: true
            provider: app_user_provider
            json_login:
                check_path: /api/authentication_token
                username_path: email
                password_path: password
                success_handler: lexik_jwt_authentication.handler.authentication_success
                failure_handler: lexik_jwt_authentication.handler.authentication_failure
            jwt: ~
        main:
            ##
            ##

    # Easy way to control access for large sections of your site
    # Note: Only the *first* access control that matches will be used
    access_control:
        ##
        ##

        # API
        - { path: ^/api/users/register, roles: PUBLIC_ACCESS }
        - { path: ^/api/authentication_token, roles: PUBLIC_ACCESS }
        # List your protected routes like this.
        - { path: ^/api, roles: [ROLE_SUPER_ADMIN, ROLE_ADMIN, ROLE_STAFF, ROLE_USER] }
#config/services.yaml
    App\OpenApi\JwtDecorator:
        decorates: 'api_platform.openapi.factory'
        arguments: ['@.inner'] 

您还可以在src/OpenApi/JwtDecorator.php中修改登录文档。

Web 分析器

当环境为开发时,Symfony 的 Web 分析器默认启用。

REST API

如果您的应用实例正在运行,请访问 /api,只有认证用户可以访问文档!。

GraphQL

如果您使用整数来查询数据,它会引发错误,这是因为 API 平台 ID 以 IRI(国际化资源标识符) 表示,要查询数据,IRI 的 URL 前缀必须始终为 "/api/{resource}/{id?}"。

以查询用户电子邮件和角色的查询为例,您可以复制此查询进行测试!(当然,您创建了您的账户之后)。

query {
  user(id: "api/users/1") {
    email,
    roles
  }
}

您可以在此处了解更多信息 这里!

模板引擎

默认包含 Twig。

实时更新

API 平台支持 Mercure,这使您可以创建实时 API。

自动表单创建

您可以使用包含的 makerfile 轻松创建表单。

路线图

  • 添加用于设置应用程序框架的命令。
  • 添加一个集成 OpenSwoole 的版本,以创建高性能框架。

入门

一切均已为您预先配置,因此您无需费心,我们还包括了 bob "the builder" 命令行工具,作为 symfony 上的抽象层,以及执行批处理命令的自定义命令。

高级使用

对于想要自定义框架的有经验的开发者,请阅读有关使用工具的文档(前往 built with)。

先决条件

  • PHP >= 8.1
  • Composer
  • npm
  • MySQL/PostgresSQL 驱动程序或 SQLITE
  • Symfony 命令行(可选)
  • Docker(可选)
  • LAMP/WAMP 开发服务器(可选)

安装

Citadel 带有一个强大的命令来生成所有迁移和编译资源。

注意:我们必须在我们的 .env 文件中设置数据库连接。

配置您的数据库

要存储会话到 Redis 并使用 MongoDB 以及高级配置,请点击此处

如前所述,需要考虑的一个重要方面是您将使用的数据库,您当然可以使用非关系型数据库,如 MongoDB 和 Redis,但默认配置是为关系型数据库。

默认数据库是 SQLITE,要开始使用您所需的数据库驱动程序,您首先应该修改您的 .env 文件中的 doctrine 驱动程序

###> doctrine/doctrine-bundle ###
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
#
DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
# DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=5.7&charset=utf8mb4"
# DATABASE_URL="postgresql://symfony:ChangeMe@127.0.0.1:5432/app?serverVersion=13&charset=utf8"
###< doctrine/doctrine-bundle ###

然后,在构建您的应用程序之前,您需要在迁移文件夹中唯一的迁移文件中添加配置,通过取消注释您将不使用的数据库驱动程序,并取消注释您正在使用的驱动程序来完成此操作。

        //SQLITE CONFIG
        $this->addSql(
            'CREATE TABLE sessions (
                sess_id VARCHAR(128) NOT NULL PRIMARY KEY,
                sess_data BLOB NOT NULL,
                sess_lifetime INTEGER NOT NULL,
                sess_time INTEGER NOT NULL
            );
            CREATE INDEX sessions_sess_lifetime_idx ON sessions (sess_lifetime);'
        );

        // MYSQL/MARIADB CONFIG
        /*
        $this->addSql(
            'CREATE TABLE `sessions` (
                `sess_id` VARBINARY(128) NOT NULL PRIMARY KEY,
                `sess_data` BLOB NOT NULL,
                `sess_lifetime` INTEGER UNSIGNED NOT NULL,
                `sess_time` INTEGER UNSIGNED NOT NULL,
                INDEX `sessions_sess_lifetime_idx` (`sess_lifetime`)
            ) COLLATE utf8mb4_bin, ENGINE = InnoDB;'
        );
        */

        // POSTGRESQL CONFIG
        /*
        $this->addSql(
            'CREATE TABLE sessions (
                sess_id VARCHAR(128) NOT NULL PRIMARY KEY,
                sess_data BYTEA NOT NULL,
                sess_lifetime INTEGER NOT NULL,
                sess_time INTEGER NOT NULL
            );
            CREATE INDEX sessions_sess_lifetime_idx ON sessions (sess_lifetime);'
        );
        */

        // MICROSOFT SQL SERVER CONFIG
        /*
        $this->addSql(
            'CREATE TABLE sessions (
                sess_id VARCHAR(128) NOT NULL PRIMARY KEY,
                sess_data NVARCHAR(MAX) NOT NULL,
                sess_lifetime INTEGER NOT NULL,
                sess_time INTEGER NOT NULL,
                INDEX sessions_sess_lifetime_idx (sess_lifetime)
            );'
        );
        */
使用bob CLI工具构建(开发中,请运行手动安装过程)

此框架包含服务器数据库会话,用于Web应用程序,以及由Api平台提供的JWT身份验证,用于REST API/GraphQL API,要为开发构建应用程序,请执行以下命令:

# Example for Linux

# Collect all the dependencies

user@machine:~Path/$ composer install

# Then build the application

user@machine:~Path/$ php bob build:dev

使用Symfony从头开始构建

您可以使用bob执行这些命令,尽管如此,我们将移除所有样板代码,并展示如何使用makerbundle进行构建。

安装所有Composer依赖项
user@machine:~Path/$ composer install
生成密钥

应用程序密钥

user@machine:~Path/$ php bin/console build:app-secret

JWT密钥

user@machine:~Path/$ php bin/console lexik:jwt:generate-keypair
在数据库中生成初始迁移
# Make a migration first
user@machine:~Path/$ php bin/console make:migration

# Execute it
user@machine:~Path/$ php bin/console doctrine:migrations:migrate
构建您的资源
user@machine:~Path/$ npm run dev
创建一个管理员用户以访问管理仪表板
user@machine:~Path/$ php bob new:admin

堡垒命令

除了所有列出的MakerBundle命令 在此处,我们还包含了一些命令,并预计将来会添加更多命令以减少样板代码。

执行命令

user@machine:~Path/$ php bob [COMMAND] [ARG?] [--OPTION?]

命令

命令 描述
build:dev 为开发构建应用程序。
build:prod 为部署构建应用程序。
build:app-secret 创建一个新的APP_SECRET。
new:admin 生成一个新的具有管理员角色的用户。
serve 启动一个最小化开发服务器。

开发服务器

Symfony CLI服务器

如果您已安装Symfony CLI,则可以运行以下命令:

user@machine:~Path/$ symfony server:start

堡垒最小本地服务器

此最小本地服务器可帮助您使用本地服务器开发应用程序。

user@machine:~Path/$ php bob serve

运行测试

请阅读此文档

以及编码风格测试

我们强烈建议使用PSR-4和PSR-12编码标准

部署

您可以在此处找到详细文档。

在Apache上

已预先配置将应用程序部署到Apache和共享主机,如您所见,我们在项目中包含了apache包和带有配置的.htaccess文件。

阅读更多

共享主机

该项目包含部署到共享主机所需的所有配置,您只需将项目上传到您的public_html文件,并别忘了配置php版本 >= 8.1。

在 NGINX 上

在 NGINX 上的部署

Symfony 文档

在 Docker 上

在 Docker 上的部署

在 Swoole 上

Swoole 集成

Symfony 运行时组件

构建工具

  • Symfony - Symfony 是一组可重用的 PHP 组件,也是一个用于 Web 项目的 PHP 框架。
  • API Platform - API Platform 是最先进的 API 平台,适用于任何框架或语言。
  • MakerBundle - Symfony Maker 帮助您创建空的命令、控制器、表单类、测试等,以便您可以忘记编写样板代码。
  • EasyAdmin - 为您的 Symfony 应用程序创建美观的管理后端。它是免费的、快速的且完全有文档的。
  • NPM - JavaScript 包管理器、注册表和网站。

补充

  • Mercure - Mercure 是一个专为快速、可靠和省电设计的实时通信开放协议。

贡献

通过 github 联系我们,获取有关我们行为准则和向我们提交拉取请求的流程的详细信息。

版本

待定,我们目前处于 alpha 版本。

作者

  • Jose Alejandro Melendez G. - 软件工程师/CEO Rurusi - Rurusi

请参阅参与此项目的贡献者列表

许可

该项目受 MIT 许可证的许可 - 请参阅LICENSE.md文件以获取详细信息

致谢

此工具激发了这个框架的创建,请查看它们!

  • Django - Django 是一个高级 Python Web 框架,鼓励快速开发和清晰、实用的设计。
  • Rails - Rails 是一个全栈框架。它提供了构建前端和后端惊人 Web 应用所需的所有工具。
  • Laravel - PHP 为 Web 精英设计的框架。