liziyu 发布的文章

1、在文件support/helper.php添加:

function env($key, $default = null)
{
    static $env_config = [];
    if (!$env_config) {
        $env_config = include base_path() . DIRECTORY_SEPARATOR . '.env.php';
    }
    return $env_config[$key] ?? $default;
}

2、在项目根目录添加.env.php

<?php

// config/app.php
$app = [
    'APP_NAME' => 'webman',
    'APP_ENV' => 'dev',
    'APP_DEBUG' => true,
];

// config/database.php
$mysql = [
    'DB_HOST' => '127.0.0.1',
    'DB_PORT' => 3306,
    'DB_USER' => 'root',
    'DB_PASSWORD' => 'root',
];

//合并数组
return array_merge($app, $mysql);

3、在config/database.php中改为:

return [
    // 默认数据库
    'default' => 'mysql',

    // 各种数据库配置
    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'host' => env("DB_HOST", '127.0.0.1'),
            'port' => env("DB_PORT", 3306),
            'database' => 'test',
            'username' => env('DB_USER', 'root'),
            'password' => env('DB_PASSWORD', 'root'),
            'unix_socket' => '',
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

注意:.env.php 不提交到版本库(.gitignore里加一行.env.php)。

本文转自:https://www.workerman.net/q/7564

<?php
function foo(){
    static $int = 0;          // correct
    static $int = 1+2;        // correct 
    static $int = sqrt(121);  // wrong  (as it is a function)

    $int++;
    echo $int;
}
?>

常量表达式的结果可以赋值给静态变量,但是动态表达式(比如函数调用)会导致解析错误。因为静态声明是在编译时解析的。

eif.png

laravel自带中间件说明:

Authenticate 用户身份验证和重定向

EncryptCookies cookie 的加解密处理和验证

PreventRequestsDuringMaintenance 维护模式

RedirectIfAuthenticated 注册、登录、忘记密码时如果已经登录则跳转

TrimStrings 前后空白字符清理

TrustHosts 配置了受信任主机的白名单

TrustProxies 配置可信代理

VerifyCsrfToken 处理 CSRF 验证

SubstituteBindings 路由参数模型绑定中间件

ThrottleRequests 接口请求频率限制中间件

可以根据它自研引擎

CREATE TABLE `departments` (
  `dept_id` int(11) NOT NULL COMMENT '部门id',
  `dept_name` varchar(255) NOT NULL COMMENT '部门名',
  `leader` varchar(255) DEFAULT NULL COMMENT '部门主管',
  `parent_id` int(11) DEFAULT NULL COMMENT '父部门id',
  `created` datetime DEFAULT NULL COMMENT '创建时间',
  `updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`dept_id`),
  KEY `dept_id` (`dept_id`),
  KEY `parent_id` (`parent_id`),
  KEY `leader` (`leader`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `form_groups` (
  `group_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `group_name` varchar(255) NOT NULL COMMENT '组名',
  `sort_num` int(3) NOT NULL DEFAULT '0' COMMENT '排序号',
  `created` datetime DEFAULT NULL COMMENT '创建时间',
  `updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`group_id`),
  UNIQUE KEY `group_name` (`group_name`),
  KEY `group_id` (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8mb4;

CREATE TABLE `process_instances` (
  `instance_id` varchar(40) NOT NULL COMMENT '审批实例ID',
  `title` varchar(255) DEFAULT NULL COMMENT '标题',
  `commit_user` varchar(50) DEFAULT NULL COMMENT '发起人ID',
  `forms` text COMMENT '表单内容',
  `status` varchar(10) DEFAULT NULL COMMENT '流程状态',
  `result` varchar(10) DEFAULT NULL COMMENT '流程结果',
  `instance_nodes` text COMMENT '流程审批链',
  `created` datetime DEFAULT NULL,
  `updated` datetime DEFAULT NULL,
  PRIMARY KEY (`instance_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `process_templates` (
  `template_id` varchar(50) NOT NULL DEFAULT '' COMMENT '审批摸板ID',
  `template_name` varchar(125) DEFAULT NULL COMMENT '摸板名称',
  `form_items` text COMMENT '摸板表单',
  `process` text COMMENT '流程数据',
  `icon` varchar(50) DEFAULT '' COMMENT '图标',
  `background` varchar(50) DEFAULT NULL COMMENT '图标背景色',
  `notify` varchar(255) DEFAULT NULL COMMENT '通知',
  `who_commit` varchar(1024) DEFAULT NULL COMMENT '谁能提交',
  `who_edit` varchar(1024) DEFAULT NULL COMMENT '谁能编辑',
  `who_export` varchar(1024) DEFAULT NULL COMMENT '谁能导出数据',
  `is_stop` bit(1) DEFAULT b'0' COMMENT '是否已停用',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `created` datetime DEFAULT NULL COMMENT '创建时间',
  `updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`template_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `template_group` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `template_id` varchar(50) NOT NULL,
  `group_id` int(11) NOT NULL,
  `sort_num` int(11) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `template_id` (`template_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=167 DEFAULT CHARSET=utf8mb4;


CREATE TABLE `users` (
  `user_id` int(11) NOT NULL COMMENT '用户id',
  `user_name` varchar(255) NOT NULL COMMENT '用户名',
  `pingyin` varchar(50) DEFAULT NULL COMMENT '拼音  全拼及首字母缩写',
  `alisa` varchar(255) DEFAULT NULL COMMENT '昵称',
  `avatar` varchar(255) DEFAULT NULL COMMENT '头像',
  `sex` bit(1) DEFAULT b'1' COMMENT '性别',
  `department_ids` varchar(255) NOT NULL COMMENT '部门id,分隔',
  `entry_date` date DEFAULT NULL COMMENT '入职日期',
  `leave_date` date DEFAULT NULL COMMENT '离职日期',
  `admin` int(2) DEFAULT '2' COMMENT '管理级别 0=主管理员 1=子管理员 2=普通员工',
  `created` datetime DEFAULT NULL COMMENT '创建时间',
  `updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`user_id`),
  KEY `user_id` (`user_id`),
  KEY `department_ids` (`department_ids`),
  KEY `leave_date` (`leave_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

对应demo
前端:https://github.com/willianfu/workflow-client
后端:https://github.com/willianfu/workflow-server

协程调度

决定到底让 CPU 执行哪个协程的代码决断过程就是协程调度,调度的策略是什么?

首先,在执行某个协程代码的过程中发现这行代码遇到了 Co::sleep() 或者产生了网络 IO,例如 MySQL->query(),这肯定是一个耗时的过程,Swoole 就会把这个 Mysql 连接的 Fd 放到 EventLoop 中。

  • 然后让出这个协程的 CPU 给其他协程使用:即 yield(挂起)
  • 等待 MySQL 数据返回后就继续执行这个协程:即 resume(恢复)

其次,如果协程的代码有 CPU 密集型代码,可以开启 enable_preemptive_schedulerSwoole 会强行让这个协程让出 CPU

摘自:https://wiki.swoole.com/#/coroutine?id=协程调度

应用场景

在使用php的过程中,我们常常需要去添加一些PHP扩展库。但是重新对php进行编译是比较蛮烦的,所以这时候我们可以使用phpizephp进行添加扩展。并且phpize编译的扩展库可以随时启用或停用,比较灵活。

使用方法

extention为要挂载的扩展包

1.wget extension.tar.gz下载相应的扩展包并解压。
2.cd extension/切换到扩展extension的目录中
3./php/bin/phpize 运行php安装目录下的phpize文件,这时候会在extension目录下生成相应的configure文件。
4./configure --with-php-config=/php/bin/php-config 运行配置,如果你的服务器上只是装了一个版本的php则不需要添加--with-php-config
。后面的参数只是为了告诉phpize要建立基于哪个版本的扩展。
5.make && make install 编译模块编译好模块之后,需要让php启用它。在php.ini文件中加入把extension.so开启即可。重启php服务。

作用

其实phpize是一个运行脚本,主要作用是检测php的环境还有就是在特定的目录生成相应的configure文件,这样make install之后,生成的.so文件才会自动加载到php扩展目录下面。

转自:https://www.cnblogs.com/houss/p/11341280.html

//...
const onLoad = async () => {
  try {
      //1.异步调用接口取服务端数据
      const params = {
      id: props.category.id,
      pageNumber: state.pageNumber || 1,
      };
      const { data } = await getArticle(params);
      const results = data.list; //list为后端返回数组
      //2.将取回的数据push到本实例数组内
      state.list.push(...results);
      //3.数据加载完成的标记
      state.loading = false;
      //当全部数据加载完成后,将finished为true
      if(results.length > 0) {
        state.pageNumber = data.p_num;
      } else {
        state.finished = true;
      }
  } catch (err) {
    state.error = true;
    state.loading = false;
  }
}
//...