好想什么呢

来猜猜吧

logs 部分

结合laravel logs重构

在laravel logs基础上将logs存入数据库

先下config\logging中添加channels

如下

1
2
3
4
5
6
7
8
9
10
11
12
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['mysql'],
],
'mysql' => [
'driver' => 'custom',
'name' => 'mysql',
'via' => App\Logging\MySQLLogger::class,
'level' => 'debug',
],
]

新建MySQLLogger 这部分可以查看laravel 文档

Logger 的 name 不能正常传入,问题暂时没找到根源

于是进行手动传入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
namespace App\Logging;

use Monolog\Logger;
use App\Logging\AdminLogsHandler;

class MySQLLogger
{
public function __invoke(array $config)
{
return new Logger(
env('APP_NAME'),
[
new LogsHandler(
$config['level'],
$config['name']
)
]
);
}
}

之后是AdminLogsHandler 用于将logs提交到数据库

这里也可以复写其他方法,可以自行查看Monolog\Logger

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php

namespace App\Logging;

use Monolog\Logger;
use Monolog\Handler\AbstractProcessingHandler;
use App\Models\Logs;

class AdminLogsHandler extends AbstractProcessingHandler
{
private $name;
public function __construct($level, $name)
{
parent::__construct($level);
$this->name = $name;
}

protected function write(array $record)
{
Logs::create([
'channel' => $this->name,
'message' => $record['message'],
'level' => $record['level_name'],
'context' => $record['context']
]);
}
}

App\Models\Logs 注意要添加批量写入

1
2
3
4
5
6
7
8
9
protected $fillable = [
'channel',
'message',
'level',
'context'
];
protected $casts = [
'context' => 'array',
];

数据迁移如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$table->increments('id');
$table->string('channel')->index();
$table->enum('level', [
'DEBUG',
'INFO',
'NOTICE',
'WARNING',
'ERROR',
'CRITICAL',
'ALERT',
'EMERGENCY'
])->default('INFO');
$table->longText('message');
$table->text('context');
$table->timestamps();

之后可以使用

Log::info('message' , ['id' => $id])

以上

智力上线

27号的份

机械劳动久了,智商就下线了

可以快速解决问题,要重复好多次也是蛮蠢的

可是一直进行无创造劳动吧 智商也就慢慢休眠了_(:з」∠)_

之后美名其曰代码可读性提高了,

不过函数用多了一样不容易读,啊啊啊 好矛盾啊


29日的份

定时自动调整权限完成了~~

加上之前的权限方便能安心了了~~ 暂时~~

程序什么的 是要不断改进的


11月1号的份

一小步与一大步,真的只是差了一点点,现在看看方便了不少。

几天前 明白了一些事儿 很意外的 也是很有意思

providers 定义成了 Facades 用起来更方便了

新建class 下面这样写 之后要注意到config\app.php中绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php 

namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class CustomService extends Facade
{
protected static function getFacadeAccessor()
{
return 'CustomService';
}
}

23号的份

vue 当前页刷新

1
location.reload()

其他

3合一验证 完成了

后端做成服务提供者了

用起来容易了不少

admin 部分要收尾了 😊


24号的份

为一些请求添加二步验证

之后是定时服务 与 logs

还有 admin 基本信息页面

游戏模式有一次眉目了


25号的份

laravel下错误返回分类

在一些情况下想要对不同的请求做不同错误的返回

可以使用$request->ajax()来识别ajax请求

对于自定义错误返回非常有用

更新node 后包报错,直接删除node_modules

之后npm install 可以解决大多数问题

使用 postman 进行 post

使用postman 直接 post 的方法

laravel 本身有CSRF 直接使用post 、 put 等等会被阻断

找到一个可以解决办法

postman chrome 插件版本

新建一个environment 并切换到新建,右上⚙位置

找一个get请求 在Tests标签下输入

1
2
var xsrfCookie = postman.getResponseCookie("XSRF-TOKEN");
postman.setEnvironmentVariable("XSRF-TOKEN", xsrfCookie.value);

{{XSRF-TOKEN}} 对应该的是第二行要注意下。

用于获取XSRF-TOKEN的值。

查看environment中 XSRF-TOKEN 是否被正确传入。右上👁位置

确认后在post 的Headers 中添加

X-XSRF-TOKEN : {{XSRF-TOKEN}}

之后就可以正常提交post了

注意:laravel XSRF-TOKEN 有时效性 注意更新

当XSRF-TOKEN 中有特殊字符,例如%时,laravel X-XSRF-TOKEN 验证会失败

主要是为postman 对XSRF-TOKEN识别有问题,桌面版本没有这个问题

postman 桌面版

同上Tests标签可以写成

1
pm.environment.set("xsrf-token", decodeURIComponent(pm.cookies.get("XSRF-TOKEN")))

使用laravel valet 时,postman不能正确访问域名……

原因valet产生的SSL证书,所以被阻挡,手动关闭后正常使用

要关闭的位置

settings -> SSL certificate verifcation -> off

之后就可以正常使用了

使用valet时 link 与 park 混用会报错!

15号的份

染黑了

自己都感觉到内心在向着无底的黑暗靠近

新键盘并没有人体工程学的好用

估计以后都只会选择人体工程学的了

开始处理权限了

admin的基本部分快做完了

之后是一般用户数据了

按照计划的一样进行扩展

说句自满的话

它不仅仅是一个游戏


16号的份

v-for 不能放在顶级标签上,会报错!

更新了一下docker镜像

role 部分也完成了……

现在又累又饿……


18号的份

role 部分修正完成~~

过程中确实补增了许多东西

到验证了~~

11号的份

队列

将特定 信息通知 推送到指定队列

修改horizon 后

可以使用

1
$user->notify((new SendEmail($Token))->onQueue('mail'));

或

1
2
use Notification;
Notification::send($user, (new SendEmail($Token))->onQueue('mail'));

roles

需要注意guard对应

view与models 要注意同步

在blade 中使用时

1
2
3
@role('role' , 'guard')
something
@endrole

在路由中使用时

1
2
3
Route::group(['middleware' => ['auth:admin' , 'role:admin']], function () {

});

也可以在控制器中使用

1
2
3
4
public function __construct()
{
$this->middleware(['role:admin' , 'auth:admin']);
}

14号的份

find 与 where 的坑

find 不能准确 查找到对应条目

where 则可以,之后只有有意识的替换find

register的后端调整完成了~~~

大概这种感觉

屏幕快照 2018-10-14 20.58.44

lavavel valet

valet share 在TLS的情况下会返回301

可以确定为valet v2.1.1 的 BUG

可以先valet unsecure 再 valet share 关闭TLS 和裸奔没区别 可以用来进行暂时测试

汇率已经到7.5了……

2FA 基本完成了

后端还缺权限的判断,与code message预制编码

前端缺特殊code message的代码响应 指的是2FA的强制验证

之后要加入批量导入功能 否则会累死~~

laravel model 的坑

使用get()去取到的数据是array 而不是object

可以手动转换 也可以直接使用 根据需求决定

渐渐的上手了

laravel 的错误信息 截取成功

标准化信息返回问题不大 方法是使用

1
2
3
4
5
try{
return 'something';
}catch(\Exception $e){
return $e->getMessage();
}

也可以在App\Exceptions\Handler 的render中做截取

1
2
3
4
switch($exception->getMessage()){
case 'someMessage';
return 'someMessage';
}

再次感受到先做后端的重要性!!

laravel model 的一些坑

如果直接使用find()后使用delete()有返回null的可能性

可以使用where('id' , $id)后使用delete() 就可以避免null的问题

记录

工作指南

  1. Code Message UI 部分处理
  2. 权限手动调整UI
  3. 权限系统的全局化,将权限处理加入列队
  4. 特定返回信息的响应
  5. 二步验证 UI 部分
  6. 语言全面本地化 【vuex-i18n】

code message

工作详解

  1. 将全局信息显示功能独立
  2. 需要为信息增加分页显示
  3. 搜索结果是否使用通用部分显示
  4. 识别2fa验证信息并相应【全局模组】
  5. 新建信息页面 【需要验证2FA】
  6. 编辑信息页面 【需要验证2FA】
  7. 删除信息页面 【需要验证2FA】

好在2FA与 code message可以使用代码手动添加,如果没先做后端真是难以想象,估计是灾难或者加班地狱吧

反而是语言本地化容易的,可以在休息时完成。

其他 貌似2FA的优先度比较高,但是信息提示也是非常重要

对功能分组编写非常重要!一人并行写是比较容易混乱 笔记是一定要的

好处是发现问题可以及时修正,也要考虑之后的多人协作的效率问题

多是交给组长处理吧

坑

bootstrap 4.*是没有图标的 需要自己找

使用fontawesome 解决了

23号的份

Code Message资源获取、更新、删除部分的UI完成。 调用与测试正常

想着将laravel 自带的UI 使用 vue 重构 最严重的问题还是在本地化语言上。

只能将使用的分离,其他的再做打算 😭

基本上这种感觉

分页显示也是有做的~

26号的份

code message 部分基本完成,之后要调整code并修正一些细小的地方。

感到前端与后端的耦合度很高,这样之后是大麻烦,要不要全部使用vuex呢……

之后 先处理2fa与验证吧,2fa 比如是全局的…… 不跨域使用oauth的意义不大

不过使用oauth容易啊~~ 啊啊啊啊啊~~~

28号的份

添加2fa ui了,没什么创造性的劳动……

使button:hover文字与样式 随鼠标产生变化

注意定义css 否则效果不会有变化

如果使用 vuex-i18n 可以使用语言行替代 对应位置文字

1
2
3
4
5
<button type="button" class="btn btn-outline-success"
v-on:mouseenter="button = 'in button'"
v-on:mouseleave="button = 'out button'">
{{ button }}
</button>
1
2
3
4
5
data(){
return {
button: 'out button'
}
}
1
2
3
4
5
6
7
8
9
.btn-outline-success:hover{
background-color: red;
}
.btn-outline-success:not(:disabled):not(.disabled):active{
background-color: red;
}
.btn-outline-success:not(:disabled):not(.disabled):focus{
box-shadow: none;
}
0%