Skip to content

核心

操作

Poppy 核心模块, system 基于本模块

权限操作

php artisan py-core:permission {slug}
{slug}:
    - list   : 获取权限列表
    - init   : 权限初始化
    - menus  : 检查菜单[todo Undefined index: children]
    - assign : 将权限赋值给指定的用户组
    - check  : 权限检测

文档以及检查工具

php artisan py-core:doc {slug}
{slug}:
    - api   : 生成api文档[apidoc 生成目录]
    - cs    : code style - fix , 代码格式修复(todo 以后IDE 来做)
    - cs-pf :
    - lint  : 安装检测PHP语法错误的工具
    - php   : 生成 php api 文档
    - log   : 查看当天的 storage 日志

关于 phplint

phplint是一个快速检测 php 语法错误的工具, 此工具无需安装在项目中, 全局安装即可.

$ composer global require overtrue/phplint -vvv
$ php artisan py-core:doc lint
$ phplint /path/of/code -c /framework/path/.phplint.yml

检查代码

php artisan py-core:inspect {slug}
{slug} :
    - apidoc     : 检查api文档(需要指定目录)
    - class      : 方法检测
    - pages      : 检测页面Key[todo 以后会删掉]
    - file       : 检测文件命名[文件类和文件位置不匹配]
    - database   : 检测数据库配置
    - controller : 列出所有功能点
    - action     : 列出所有业务逻辑
    - seo        : 生成 seo 项目
    - db_seo     : 生成数据库SEO 数据

运维工具

php artisan py-core:op {slug}
{slug} :
    - mail   : 发送运维邮件

生成 php api 文档

先睹为快, 使用 sami 生成的 php api 地址 PhpApi For Poppy

生成配置文件

$ php artisan vendor:publish --tag=poppy
...
Copied File [/modules/system/resources/config/sami.php] To [/storage/sami/config.php]
Publishing complete.

下载 sami

首先下载 sami , 放到 storage/sami/sami.phar 这个位置 或者使用命令来下载, 如果不知道命令可以运行 php artisan py-core:doc php 来查看下载文件的命令

$ php artisan py-core:doc php

Please Run Command To Install Sami.phar:
curl http://get.sensiolabs.org/sami.phar --output /data/workbench/www/wulicode/storage/sami/sami.phar

# 下载之后再运行

$ php artisan py-core:doc php
Please Run Command:
php /data/workbench/www/wulicode/storage/sami/sami.phar update /data/workbench/www/wulicode/storage/sami/config.php

我们运行命令来生成 php 文档

由于 sami 最新版是基于 php7.1 版本的, 所以我们必须以正确版本来运行. 如果版本不正确则无法运行

$ php71 /data/workbench/www/wulicode/storage/sami/sami.phar update /data/workbench/www/wulicode/storage/sami/config.php
 Updating project

Version master
  Parsing   done
  Rendering done

 Version    Updated C    Removed C
   master         1224            0

 Version    Updated C    Updated N    Removed C    Removed N
   master            2            0            0            0

运行完成后会在 public/docs/php 文件夹下生成标准的 html 文档, 这样我们就可以进行访问了.

如果默认的配置无法满足你的要求可以编辑 resources/sami/sami.php 文件来修改需要生成文档的文件夹和目标路径.

生成文档如下

Sami 配置文件查看 : sami-config.php

配置

文件位置 : config/poppy.php

apidoc

  • Type : array

api 接口文档配置, 改文档可以使用 php artisan py-core:doc api 来生成文档, 定义如下

'apidoc' => [
    ...
    'web' => [
        // 标题
        'title'            => '前台接口',
        // 方法
        'method'           => 'post',
        // 默认访问地址
        'default_url'      => 'api_v1/system/auth/login',
        // 其他参数  签名验证
        'sign_certificate' => [
            'name'         => 'timestamp',
            'title'        => 'TimeStamp',
            'type'         => 'String',
            'is_required'  => 'Y',
        ],
        // 签名生成
        'sign_generate'    => DefaultApiSignProvider::js(),
        // 源文件夹
        'origin'           => 'modules',
        // 接口测试构建器[未实现]
        'factory'          => WebApiFactory::class,
        // 生成目录
        'doc'              => 'public/docs/web',
    ],
    ...
]

op_mail

  • Type : string
  • Default : env('CORE_OP_MAIL', '')

后台可支持发送测试邮件, 这里配置发送人的邮箱

rbac

  • Type : array

设置 RBAC 模型以及外键 KEY, 这里默认设定的是 poppy/system 模块的模型, 不使用此模块可以自行实现模型定义以及关联关系

'rbac'       => [
    // 角色模型
    'role'            => \Poppy\System\Models\PamRole::class,
    // 账号模型
    'account'         => \Poppy\System\Models\PamAccount::class,
    // 角色账号模型
    'role_account'    => \Poppy\System\Models\PamRoleAccount::class,
    // 权限模型
    'permission'      => \Poppy\System\Models\PamPermission::class,
    // 角色权限模型
    'role_permission' => \Poppy\System\Models\PamPermissionRole::class,
    // 角色外键
    'role_fk'         => 'role_id',
    // 账号外键
    'account_fk'      => 'account_id',
    // 权限外键
    'permission_fk'   => 'permission_id',
],

缓存

缓存定义

缓存使用扁平化管理, 缓存函数是在 laravel 的基础上加了一层标签, 用法遵循 laravel 缓存使用

缓存一般采用如下命名

sys_tag('{slug}')->get('{name}')
slug    : 根据模块目录来进行判定
    例如 poppy system 模块命名为 py-system
    例如 poppy core 模块命名为 py-core
    例如 poppy core rbac 模块命名为 py-core-rbac(因为需要用到 flush 方法, 这里采用标签来区分, 而不是使用 type)
name    : 代表的是缓存的名称

为了保证缓存名称的唯一性我们约定, 对于缓存来讲存在可删除的缓存也存在不可删除的缓存(例如用户的登录 Token, 涉及到单点登录)

  • slug

poppy 模块 : py-{module} , 如果是需要持久化的缓存, 我们使用 py-{module}-persist 来作为标签, 对于缓存定义, 不建议在 {Module}Def 文件中添加 tag:{module} 标识, 而是应当使用 slug + name 方式进行缓存的约定 - name : name 使用静态方法定义, 支持传参

示例

例如 Area 模块的我们定义缓存函数

php
<?php namespace Poppy\Area\Classes;


class PyAreaDef
{
    /**
     * ID -> PID 映射
     * @return string
     */
    public static function ckMatchIdPid(): string
    {
        return 'match_id_pid';
    }
}

使用

php
/**
 * @param bool $clear 是否清除
 * @return mixed
 */
function matchKv($clear = false)
{
    if ($clear) {
        sys_tag('py-area')->del(PyAreaDef::ckMatchIdPid());
    }

    return sys_tag('py-area')->remember(PyAreaDef::ckMatchIdPid(), 10, function () {
        return AreaContent::pluck('parent_id', 'id')->toArray();
    });
}