// JavaScript
window.location.href; //获取当前页面的URL
split() //用于把一个字符串分割成字符串数组。
JSON.parse() //用于将一个 JSON 字符串转换为对象
JSON.stringify() //JavaScript 值转换为 JSON 字符串

// Jquery
attr() //设置或返回被选元素的属性值。
animate()  //执行 CSS 属性集的自定义动画
scrollTop() //方法返回或设置匹配元素的滚动条的垂直位置
offset() //方法返回或设置匹配元素相对于文档的偏移(位置)
click() //触发 click 事件,或规定当发生 click 事件时运行的函数
css() //设置或返回被选元素的一个或多个样式属性
empty() //从被选元素移除所有内容,包括所有文本和子节点
unbind() //移除被选元素的事件处理程序
append()//在被选元素的结尾(仍然在内部)插入指定内容
fadeIn() //方法使用淡入效果来显示被选元素
fadeOut()//使用淡出效果来隐藏被选元素
each() //方法规定为每个匹配元素规定运行的函数。
slideDown() //方法通过使用滑动效果,显示隐藏的被选元素。
setInterval() //按照指定的周期(以毫秒计)来调用函数或计算表达式
clearInterval() //取消由 setInterval() 函数设定的定时执行操作

Window localStorage 属性

localStorage 和 sessionStorage 属性允许在浏览器中存储 key/value 对的数据。

保存数据语法:localStorage.setItem("key", "value");

读取数据语法:var lastname = localStorage.getItem("key")

删除数据语法:localStorage.removeItem("key");

01.框架与LTS

什么是框架

为解决一定问题并按照一定的设计模式搭建的项目架构

为什么要使用框架

框提供了很多功能,比如数据库(DB)、缓存(Cache)、会话(Session)、文件上传等。

不但为前期开发提供了方便,更为后期项目性能的优化(缓存技术由文件缓存换成 Redis),平台的改变(数据库由 Oracle 换成 Mysq)提供了技术保障

什么是LTS、非LTS

长期支持(Long Time Support),Laravel 遵守“早发布,常发布”的版本发布准则,这也是开源界常通常的做法。

02.Laravel中的路由和MVC

路由 routesweb.php

// 基础路由
Route::get('get', function () {
    return 'show Get';
});

Route::post('post', function () {
    return 'show Post';
});

// 多请求路由
Route::match(['get', 'post'], 'match', function () {
    return 'show match';
});

Route::any('any', function () {
    return 'show any';
});

// 路由参数
Route::get('user/{id}',function($id){
    return 'user-id-' . $id;
});

Route::get('user/{name?}',function($name = 'sean'){
    return 'user-name-' . $name;
});

Route::get('user/{id}/{name?}', function ($id, $name = 'sean') {
    return 'user-id-' . $id . 'user-name-' . $name;
})->where(['id' => '[0-9]+', 'name' => '[A-Za-z]+']);


// 路由别名
Route::get('user/center', ['as' => 'center'], function () {
    return route('center');
});

Route::get('user/center-test', function () {
    return route('center');
})->name('center');

// 路由群组
Route::gruop(['prefix' => 'great'],function(){

    Route::get('get', function () {
        return 'great Get';
    });

    Route::post('post', function () {
        return 'great Post';
    });
});

// 路由中输出视图
Route::get('get', function () {
    return view('welcome');
});

控制器 appHttpControllers/

public function info($id)
{
  return view('member/info',[
    'id' => $id
  ]);
}

视图 resourcesviews

世界上最好的语言是PHP{{$id}}

模型 app\

use Illuminate\Database\Eloquent\Model;

class Member extends Model
{
    public static function getMember()
    {
        return 'member name is Alrcly';
    }
}

03. 数据库操作

DB配置(\.env、config)

DB facade

// 查询(Array)
$students = DB::select('select * from student');

// 新增(Bool)
$bool = DB::insert('insert into student(`name`,age) values (?,?)', ['muke', 19]);

// 更新(Number)
$num = DB::update('update student set age = ? where `name` = ?',[20,'alrcly']);

// 删除(Number)
$delete = DB::delete('delete from student where id > ?',[1]);

04.查询构造器

// 新增(Bool)
DB::table('student')->insert(
  ['name' => '小红', 'age' => 10]
);

// 新增(Number)
DB::table('student')->insertGetId(
  ['name' => '小小狗', 'age' => 4]
);

// 更新(Number)
DB::table('student')->where('id', 12)->update(['age' => 30]);

// 自增(Number)
DB::table('student')->where('id', 12)->increment('age', 2);

// 自减(Number)
DB::table('student')->where('id', 12)->decrement('age', 2, ['name' => 'ff']);

// 删除(Number)
DB::table('student')->where('id', 12)->delete();

// 删除(NUll)
DB::table('student')->truncate();

// 查询多条数据
DB::table('student')->get();

// 查询一条数据
DB::table('student')->first();

// 条件查询
DB::table('student')
  ->whereRaw('id >= ? and age > ?', [1, 3])
  ->get();

// 查询一列字段
DB::table('student')->pluck('name', 'id');

//查询指定字段
DB::table('student')->select('id', 'name', 'age')->get();

// 分段获取
DB::table('student')->orderBy('id')->chunk(2, function ($students) {
  var_dump($students);
});

// 记录数
DB::table('student')->count();

// 最大值
DB::table('student')->max('age');

// 最小值
DB::table('student')->min('age');

// 平均值
DB::table('student')->avg('age');

// 平均值
DB::table('student')->avg('age');

// 和值
DB::table('student')->sum('age');

05.Eloquent ORM简介、模型的建立及查询数据

模型的建立

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{

    // 指定表名
    protected $table = 'student';

    // 指定主键
    protected $primaryKey = 'id';

    // 主键类型
    public $incrementing = true;
    protected $keyType = 'string';

    // 表明模型是否应该被打上时间戳
    public $timestamps = true;

    // 时间戳的存储格式
    protected $dateFormat = 'U';

    // 指定时间戳
    const CREATED_AT = 'created_at';
    const UPDATED_AT = 'updated_at';

    // 指定不同的连接
    protected $connection;

    // 字段默认值
    protected $attributes = [
        'name' => '空白',
    ];
  
    //可以被批量赋值的属性
    protected $fillable = ['name','age','sex'];

    //不可以被批量赋值的属性.
    protected $guarded = ['price'];
}

数据的查询

// 所有记录(对象,指定字段)
Student::all(['id']);

// 多条条件记录(对象)
Student::where()->get();

// 单条记录(对象,主键)
Student::find( [1]);

// 单条条件记录(对象,主键)
Student::where()->first();

// 为空时会抛出异常
Student::findOrFail(1);
Student::where()->firstOrFail();

//从数据库中重新获取模型,已存在的模型实例不会受任何影响
Student::where()->orderBy()->first();

//从数据库中重新获取模型,新数据重新水合现有模型
Student::where()->orderBy()->refirst();

// chunk(对象)
Student::orderBy('id')->chunk(2, function ($students) {
  var_dump($students);
});

// 使用游标
$users = App\User::cursor()->filter(function ($user) {
  return $user->id > 500;
});

foreach ($users as $user) {
  echo $user->id;
}

新增、自定义时间戳及批量赋值

 // 插入 (模型方法,bool)
$studentM = new Student();
$studentM->name = '小明';
$studentM->age = 18;
$studentM->sex = 1;
$studentM->save();

// 批量赋值(obj)
$data = [
  'name' => '小好份',
  'age' => 134,
  'sex' => 1
];
$studentM = Student::create($data);
$data = [
  'name' => '小的',
  'age' => 72,
  'sex' => 1
];
$studentM->fill($data);

 // 不存在则新增(不能使用自增主键)
$where = ['name' => 'cyndi'];
$data = [
  'age' => '31',
  'sex' => '2'
];
Student::firstOrCreate($where, $data);

// 不存在则创建实例(不能使用自增主键)
$where = ['name' => 'cyndi'];
$data = [
  'age' => '31',
  'sex' => '2'
];
Student::firstOrNew($where, $data);

修改数据

// 更新 (模型方法,bool)
$studentM = Student::find(1);
$studentM->name = '小红';
$studentM->save();

// 批量更新(Number)
Student::where('sex', 1)->update(['sex' => 2]);

// 存在更新,不存在新增(不能使用自增主键)
$where = ['name' => 'cyndi'];
$data = [
  'age' => '31',
  'sex' => '2'
];
Student::updateOrCreate($where, $data);

删除数据

// 通过模型删除
$student = Student::find(1);
$student->delete();

// 通过主键删除
Student::destroy([2, 3]);

// 通过条件删除
Student::where('id', 1)->delete();

6.Blade模版引擎

简介及模版继承的使用 (resources/views)

<html>
<head>
    <title>应用名称 - @yield('title')</title>
</head>
<body>
@section('sidebar')
    这里是侧边栏
@show

<div class="container">
    @yield('content')
</div>
</body>
</html>
@extends('layouts.app')

@section('title', 'Laravel学院')

@section('sidebar')
    @parent
    <p>Laravel学院致力于提供优质Laravel中文学习资源</p>
@endsection

@section('content')
    <p>这里是主体内容,完善中...</p>
@endsection

基本语法及include的使用

<!-- 1.模版中输出PHP变量 -->
{{ $name }}}

<!-- 2.模版中调用PHP代码 -->
{{ tiem() }}
{{ $name or 'default' }}

<!-- 3.原样输出 -->
<p>@{{ $name }}</p>

{{-- 4.模版注释--}}

{{-- 5. 引入子视图 include --}}
@include('good',[]);

流程控制

{{-- if --}}
@if($name == 'sean')
    I'm sean
@elseif()
    I'm imooc
@else()
    Who am I?
@endif()

{{-- if函数 --}}
@if(in_array($name,$arr))
    true
@else
    false
@endif

{{-- if取反--}}
@unless($name != 'sean')
    I'm sen
@endunless

{{-- for --}}
@for($i=0;$i < 10;$i++)
    <p>{{ $i }}</p>
@endfor

{{-- foreach --}}
@foreach($student as $v)
    <p>{{ $student->name }}</p>
@endforeach

{{-- foreach --}}
@foreach($student as $v)
    <p>{{ $student->name }}</p>
@empty
    <p>我是空的</p>
@endforeach

URL函数

url('路由名');
action('控制器@方法名');
route('路由别名');

前言

Life's too short to waste a second.

工作

如在2018年对公司的担忧一样,公司在2019年的四月倒闭了。虽然不是正式意义上的倒闭,但是拖欠员工工资到劳动仲裁的角度来看,和倒闭也相差无几了。

在家休整了两个月,出来面试受到了不小的打击。前前后后面试了近20家公司,合适的不给 Offer,给 Offer 的觉得不合适,最后寻寻觅觅才遇到了现在的这家公司。现在的岗位跟我在「中软国际」的一模一样,市场部的“全干工程师”,在这样的工作环境下, 我唯一的发展方向就是「全栈工程师」了。

生活

减肥始终是件难事,健身什么的——完全不存在的。拍结婚照的动力都没能让我减肥成功,但是仔细想想减肥这事现在开始就好了,并不是非要一个契机才行的。而且发糕给我买的「健身环大冒」险已经在路上了,加油。

回看往年的文字,我好像每年跨年的这段时间,情绪就会变得不太稳地,可能这段时间是我的「水逆期」吧。最近和发糕的矛盾比较多,说起来我和她都有责任。发糕因为考编的事最近情绪都比较低落,有些对我来说强迫症的地方,她并没有注意到。而我最近又是「水逆期」,所以看到强迫症的地方就会莫名的火大。告诉自己,控制好自己的情绪,多多爱发糕。

没想到,离上面文字的写作时间已经过了两个月了。也就是说我自己拖稿到3月份了。这两个月里发生了不少的事,理应记录一下,但这篇文章还是按照两个月之前的心情来写吧。不知道自己还能不能找到来个月以前的感觉。

Swoole 把自己玩死了!最近本来使用 Swoole 的框架,纷纷决定使用 Golang 作为 Swoole 的替代品。因为 Swoole 钦定了一个「官方」框架「Hyperf」,而且 Swoole 的稳定版本将只提供给付费用户。看来学习路径已经非常的明确了,PHP + Golang 才是唯一的出路。近些年来 Java 大有完全取代 PHP 的势头,不知道 PHP 还能撑多久。

爱情

我的老婆是一只猫。她是一只懒洋洋的猫,一只会在家里捣乱的猫,一只同样的错误会犯很多次的猫,一只不会理财的猫,一只会冲动消费的猫。她也是一只善解人意的猫,一只会倾听我抱怨的猫,一只会做饭的猫,一只超爱我的猫。而我也是超爱她,愿意和她这只猫共度余生。

计划

修身:

  • 健身环大冒险
  • 上班不迟到,且能喝上咖啡
  • 种香料
  • 写好英文圆体

技术:

  • PHP 基础
  • Golang
  • 合理的前端知识

写作:

  • 至少达到两周一篇的文章输出量

总结

2020 年全世界的开局都不对,都非常的危险。而我只希望和她幸福的生活下去,别无他求。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>富媒体与WebForms2.0</title>
</head>
<body>

<!-- canvas -->
<canvas id="my" width="360" height="240">
    <p>you are my only love</p>
    <img src="" alt="">
</canvas>
<script>
    //
    var canvas = document.getElementById('my');
    var context = canvas.getContext('2d');
    //
    context.strokeStyle = '#990000';
    context.strokeRect(20, 30, 100, 50);
</script>

<!-- audio 音频 -->
<audio controls id="audio">
    <source src="https://oss.alrcly.com/Typora/video.mp4" type="video/mp4">
</audio>
<div>
    <button onclick="document.getElementById('audio').play()">Play</button>
    <button onclick="document.getElementById('audio').pause()">Pause</button>
    <button onclick="document.getElementById('audio').volume+=0.1">VolumeUp</button>
    <button onclick="document.getElementById('audio').volume=0.1">VolumeDown</button>
</div>

<!-- video 视频 -->
<video controls width="800" height="450" poster="https://oss.alrcly.com/Typora/video.jpg">
    <source src="https://oss.alrcly.com/Typora/video.mp4" type="video/mp4">
</video>

<!-- form 表单 -->
<form>
    <!-- datalist 下拉输入-->
    <label>You Home</label>
    <input type="text" name="home" id="home" list="planets">
    <datalist id="planets">
        <option value="Mercury1">
        <option value="Mercury2">
        <option value="Mercury3">
    </datalist>
    <!-- search 搜索-->
    <label for="text">输入文本:</label><input id="text" type="text">
    <label for="search">进行搜索:</label><input id="search" type="search">
    <!-- email、url、tel-->
    <label for="email">输入电子邮箱:</label><input id='email' type="email">
    <label for="url">输入URL:</label><input id="url" type="url">
    <label for="tel">输入电话:</label><input id="tel" type="tel">
    <br>
    <!-- amount 活动块-->
    <label for="range">滑动块</label>
    <input id="range" type="range">
    <!-- number 数字微调-->
    <label for="number">数字微调</label>
    <input id="number" type="number">
    <!-- data 时间-->
    <label for="date">时间</label>
    <input id="date" type="date">
    <!-- color 拾色器-->
    <label for="color">拾色器</label>
    <input id="color" type="color">
    <!-- pattern 正则自定义-->
    <label for="zip">正则自定义</label>
    <input id="zip" pattern="[\d]{5}(-[\d]{4})">
</form>

</body>
</html>

最近在项目中使用到了勾号,但是尝试了很多,最后的显示结果却是 √ 这样的根号。

经过寻找,终于找到了正确的勾号,记录一下以备以后使用。

符号Unicode码(Hex)名字
U+2713CHECK MARK(勾号)
U+2714HEAVY CHECK MARK(粗勾号)
U+2717BALLOT X (交叉)
U+2718HEAVY BALLOT X (粗体交叉)
U+2610BALLOT BOX(方格)
U+2611BALLOT BOX WITH CHECK(打勾方格)
U+2612BALLOT BOX WITH X (带交叉方格)