goldenscarab/modulus2

CMS 开发者专用

v2.2.8.2 2024-07-17 19:51 UTC

README

CMS 人员

必需

  • Composer
  • PHP >= 8.1
  • Laravel >= 10

安装

使用 composer 安装此包。

composer require goldenscarab/modulus2

Laravel 9 使用自动加载文件,因此不需要手动添加 ServiceProvider。

发布

php artisan vendor:publish --provider="Goldenscarab\Modulus\App\Providers\PublishesServiceProvider" --force
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

安装前端依赖

bash vendor/goldenscarab/modulus2/assets_install.sh

配置资产

将文件 resources/js/app.js 中的 require('./bootstrap') 替换为

import './modulus.js'

在文件 resources/css/app.css 中添加(如果需要则创建文件)

@import "./modulus.css"

使用以下内容更新您的 vite.config.js

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from '@vitejs/plugin-vue'
import path from "path";

export default defineConfig({
    plugins: [
        laravel({
            input: ['resources/css/app.css', 'resources/js/app.js'],
            refresh: true,
        }),
        vue()
    ],
    resolve: {
        alias: {
            "~": path.resolve("node_modules"),
            "@resources": path.resolve("resources"),
            "@vendor": path.resolve("vendor"),
            "@modulus": path.resolve("vendor/goldenscarab/modulus2"),
            "@theme": path.resolve("vendor/goldenscarab/modulus2/src/resources/theme/architectui")
        },
    },
    build: {
        //sourcemap: true,
    },
});

编译资产

npm run dev

配置

modulus.php 文件

编辑 config/modulus.php 文件,如示例所示

<?php

return [

    /**
     * Classe définissant la couleur du bandeau haut
     * default: bg-focus header-text-light
     * background: bg-primary, bg-secondary, bg-success, bg-info, bg-warning, bg-danger, bg-light, bg-dark, bg-focus, bg-alternate
     * text: header-text-light, header-text-dark
     */
    'color_header' => 'bg-focus header-text-light',

    /**
     * Classe definissant la couleur du menu
     * default: bg-dark sidebar-text-light
     * background: bg-primary, bg-secondary, bg-success, bg-info, bg-warning, bg-danger, bg-light, bg-dark, bg-focus, bg-alternate
     * text: sidebar-text-light, sidebar-text-dark
     */
    'color_sidebar' => 'bg-dark sidebar-text-light',

    /**
     * Icone du nom de l'application
     * default: <i class="fa fa-puzzle-piece align-middle"></i>
     */
    'app_icon' => '<i class="fa fa-puzzle-piece align-middle"></i>',

    /**
     * Nom de l'application
     * default: <b>M</b>odulus
     */
    'app_name' => '<b>M</b>odulus',

    /**
     * Préfixe des url de Modulus
     * default: /backend
     */
    'url_prefix' => '/',

    /**
     * Namespace des constroleurs à surcharger
     * default: Goldenscarab\\Modulus\\App\\Http\\Controllers\\App\\DashboardController@index
     * - DashboardController
     * - App\\Http\\Controllers\\DashboardController@index
     */
    'dashboard_action' => 'App\\Http\\Controllers\\HomeController@index',

    /**
     * Menu à afficher dans l'interface
     *
     * Constuction :
     *  - Nom du groupe
     *      - Element 1
     *          - Sous élement 1.1
     *          - Sous élement 1.2
     *          - Sous élement 1.3
     *      - Element 2
     *          - Sous élement 2.1
     *          - Sous élement 2.2
     *          - Sous élement 2.3
     *
     * Exemple :
     *  'menu' => [
     *   [
     *       'name' => 'Group',
     *       'items' => [
     *           [
     *               'icon' => 'pe-7s-home',
     *               'name' => 'Menu name',
     *               'subitems' => [
     *                    [ 'name' => 'Item 1', 'route' => 'test.item'],
     *                    [ 'name' => 'Item 2', 'link' => '/'],
     *                    [ 'name' => 'Item 3', 'route' => 'test.item'],
     *                ]
     *           ]
     *       ]
     *   ],
     */
    'menu' => [
        [
            "items" => [
                [
                    "icon" => "pe-7s-home",
                    "name" => "Tableau de bord",
                    "url" => "/"
                ]
            ]
        ],
        [
            "items" => [
                [
                    "icon" => "pe-7s-diamond",
                    "name" => "Test",
                    "subitems" => [
                        [ 'name' => 'Item 1', 'route' => 'private.test.foos.index'],
                    ]
                ]
            ]
        ]
    ],

    /**
     * Message du footer
     */
    'msg_footer_right' => 'La simplicité dans le sur mesure',
    'msg_footer_left' => '<strong>Copyright &copy; ' .  date('Y')  . ' <a href="https://www.goldenscarab.fr" target="_blanc">Goldenscarab.</a></strong>&nbsp;All rights reserved.',

    'hashids_salt' => env('HASHIDS_SALT', 'modulus'),
    'hashids_length' => env('HASHIDS_LENGTH', 16),
];

路由

您可以从 config/modulus.php 配置文件中自定义 Modulus 的基本 URL。如果您希望将 Modulus URL 定位到域名根目录,请考虑清理 routes/web.php 文件中的默认路由。

您还可以通过更改 config/modulus.php 文件中的 namespace_custom 参数来自定义仪表板。这样,您将重定向 DashboardController@index 路由到您选择的命名空间。示例

php artisan make:controller DashboardController

config/modulus.php 文件中

'dashboard_action' => 'App\\Http\\Controllers\\DashboardController@index',

接下来,只需自定义新创建的控制器中的 index 方法以显示新的仪表板。 App\Http\Controller\DashboardController@index

public function index()
{
    $breadcrumb = [
        '<i class="fa fa-home me-2"></i> Accueil' => '#'
    ];

    return Inertia::render('Dashboard')->with([
        'page_title'    => 'Tableau de bord',
        'page_subtitle' => 'Test',
        'page_icon'     => 'pe-7s-home',
        'breadcrumb'    => $breadcrumb
    ]);
}

对于视图,您可以使用以下模型

<template>
    <div>
        <h1>Mon dashboard ici</h1>
    </div>
</template>

Insomnia

安装中间件

php artisan inertia:middleware

// App\Http\Middleware\HandleInertiaRequests
protected $rootView = 'modulus::app';

中间件

将以下内容添加到 app/Http/Kernel.php 文件中

$middlewareGroups 变量 > 'web' 中添加以下行

\App\Http\Middleware\HandleInertiaRequests::class,

$middlewareAliases 变量中添加以下行

/* Middlewares ajoutés */
'auth.active' => \Goldenscarab\Modulus\App\Http\Middleware\RedirectIfNotActive::class,
'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class,

App

编辑应用根目录下的 .env 文件以配置数据库访问

迁移

配置数据库访问后,是时候创建表并使用初始数据填充数据库了。

php artisan migrate --seed

模块

您可以将应用程序构建为模块。一个模块示例位于 /Modules 文件夹中。

为了允许自动加载模块的类,您需要修改 composer.json 文件,如下所示

{
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Modules\\": "Modules/"
        }
    }
}

认证

为了使 API 正常工作,您需要在 Kernel.php 文件中取消注释以下行

'api' => [
    \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, // Sanctum
    \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
],

如果出现 401 或 403 错误,请检查以下内容

  • APP_URL.env 文件中包含正确的 URL(带有正确的端口)
  • 迁移已成功完成,并使用了 seedersphp artisan migrate --seed

JWT

需要在 .env 文件中添加两个属性

JWT_SECRET=secret
JWT_EXPIRATION=7200

避免出现 429(请求过多)错误

编辑 Kernel.php 文件,在 $middlewareGroups 中将 \Illuminate\Routing\Middleware\ThrottleRequests::class.':api' 替换为 \Goldenscarab\Modulus\App\Http\Middleware\ModulusThrottleMiddleware::class.':api'

protected $middlewareGroups = [
    'web' => [
        //...
    ],

    'api' => [
        //...
        //\Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
        \Goldenscarab\Modulus\App\Http\Middleware\ModulusThrottleMiddleware::class.':api',
    ],
];

然后您可以从配置文件 modulus.php 个性化设置 api_max_rate

在 Modulus 中显示异常

\App\Exceptions\Handler.php 文件中,在 register 方法中添加以下行

    ...
    /**
     * Register the exception handling callbacks for the application.
     */
    public function register(): void
    {
        $this->reportable(function (Throwable $e) {
            try {
                ModulusException::store($e);
            } catch (Exception $e) {

            }
        });
    }
    ...

安全

如果您发现任何与安全相关的问题,请通过 contact@goldenscarab.fr 发送电子邮件,而不是使用问题跟踪器。

版权信息

许可

MIT 许可证 (MIT)。请参阅许可证文件获取更多信息。