Write the Code. Change the World.

1月 19

从零开始构建 laravel 项目

包裹以下功能:

  1. web 页面(可能是商城,可能是论坛,可能是其他)
  2. 接口功能(一套接口(jwt),提供给 app,小程序 或其他)
  3. 后台功能 (不再使用 layui admin ,使用 ant design pro。权限控制,laravel 自己的权限控制很好,ant design pro 不熟,不知两边的权限能否融洽。就是只使用服务端的权限,不去耦合 antdesignpro 的权限)
  4. 额外。 微信授权、站点地图、elastsearch、定时任务、swoole等。

开始

开发环境依然是 homestead。虽然 docker 很火热, 但总用不好。还有,如果真是线上环境,宁愿一个一个去编译安装所用软件(个数不多)。因为不熟悉,所以不敢放心去使用。

homestead 配置域名:admin.com

laravel 版本为最新版本 6.8.*

# 创建 laravel 6.8 项目
composer create-project laravel/laravel --prefer-dist admin.com "6.8.*"

cd admin.com

# 去掉原本的 readme,添加简单的 readme
rm -rf README.md

echo 'laravel 6.8 initialize' >> Readme.md

# 初始化 git
git init

# 添加,并 commit
git add .

git commit -m 'laravel 6.8 initialize'

为了保证代码风格,安装使用 editorcofig 。配置文件 laravel 项目里边已经有了再稍微改一点点。如下,保存提交版本。

修改根目录下的 .editorconfig

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false

[*.yml]
indent_size = 2

[*.{js,html,blade.php,css,scss}]
indent_style = space
indent_size = 2

然后提交版本:

git add .
git commit -m '增加 editorconfig 配置'

修改时区以及语言版本

# vim config/app.php

'timezone' => 'Asia/Shanghai',

'locale' => 'zh-CN',

# git
git add .

git commit -m '设置时区以及默认语言版本'

添加辅助函数

# 在 app 目录下,添加 helpers.php 文件,辅助函数都放在该文件里。
touch app/helpers.php

# 修改 composer.json,让 autoload 的时候载入辅助函数

{
    ...

    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "files": [
            "app/helpers.php"
        ]
    }
    ...
}

# 重新加载文件
composer dump-autoload

git提交

git add .

git commit -m '新增辅助函数文件'

现在 helpers.php 文件还是空的,但后续可以添加你需要的。比如 curl 等。

7月 14

Laravel 小点滴

  1. {{ csrf_field() }} 可以使用 @csrf 来代替。
7月 09

使用 Laravel 开发框架,官方推荐使用 Homestead 环境。那么,Homestead 环境怎么构成呢。 至少有下边四个部分。

  1. virtualBox 虚拟机盒子(容器)。当然,你可以使用 VMWare, Parallels, Hyper-V。

  2. vagrant 虚拟机管理工具。通过命令,就可以操控管理你的虚拟机。

  3. Homestead box。 虚拟机实体,也就是环境。

  4. Homestead yaml。 虚拟机实体配置文件。

下载安装

VirtualBox

VirtualBox 是 Oracle 公司的开源虚拟机软件。VirtualBox号称是最强的免费虚拟机软件,它不仅功能齐全,而且性能也很优异!VirtualBox 支持大部分流行的系统,如:Mac, Windows, Linux 等。

根据对应系统下载,一步一步默认安装即可。

官网: https://www.virtualbox.org/wiki/Downloads

vagrant

Vagrant 是用来管理虚拟机的工具,支持当前主流的虚拟机系统如 VirtualBox、VMware、AWS 等。Vagrant的主要作用是提供一个可配置、可移植和复用的软件环境。Vagrant 让你通过编写一个 Vagrantfile文件来控制虚拟机的启动、虚拟机网络环境的配置、虚拟机与主机间的文件共享,以及启动后自动执行一些配置脚本,如自动执行一个 Shell Script来安装一些必备的开发工具,如安装配置MySQL、PHP,甚至是自动配置 Nginx 站点。这意味着,在一个多人开发的项目中,你只需要同步 Vagrantfile 文件,就可以保证参与项目的每个人各自的机器上拥有一致的开发环境。

根据对应系统下载,一步一步默认安装即可。

官网:https://www.vagrantup.com/downloads.html

Homestead box

homestead.box 虚拟机盒子是提前打包好的 Vagrant Box 虚拟机盒子,里面预装了 Nginx Web 服务器、PHP 7.0、MySQL、Postgres、Redis、Memcached、Node,以及所有你在使用 Laravel 开发时所需要用到的各种软件。

Box的历史版本:https://app.vagrantup.com/laravel/boxes/homestead

通常有两种安装方式。第一种,使用vagrant命令(先安装好 gitbash工具)。

vagrant box add laravel/homestead 
### 然后,提示选择 虚拟机容器。如果使用的是 VirtualBox 就选择 VirtualBox前边对应的序号,回车。就开始进入安装中了。

由于,文件放在国外,内地访问比较慢,以免中断的情况放生。建议用 迅雷 先将box下载到本地。这个就是第二种方式了。第一种方式中,选择虚拟机容器,回车后,会显示下载的 Homestead box地址,将地址复制出来,用迅雷下载到本地就好了。

这里的地址是: https://vagrantcloud.com/laravel/boxes/homestead/versions/6.1.0/providers/virtualbox.box

下载好 box后,放在系统的磁盘下,待用。比如放在 D:\WebServer\homesteadbox\

Homestead

Homestead 利用 Vagrantfile 提供的便利,定制了一整套的可配置、可移植和复用的 Laravel 开发环境。Homestead 虚拟机里面包含了 Nginx Web 服务器、PHP、MySQL、Postgres、Redis、Memcached、Node,以及所有你在使用 Laravel 开发时需要用到的各种软件。

Homestead 包含了两个东西:Homestead 管理脚本、Homestead Box 虚拟机盒子。
虚拟机盒子上一步骤已经下载好了。这里下载管理脚本。

git clone https://github.com/laravel/homestead.git ~/Homestead 

运行 init.bat ,生成 Homestead.yaml 配置文件。

安装盒子

在 Homestead 目录下,创建 metadata.json 文件。内容如下:

{
    "name": "laravel/homestead",
    "versions": 
    [
        {
            "version": "6.1.0",
            "providers": [
                {
                  "name": "virtualbox",
                  "url": "D:/WebServer/homesteadbox/virtualbox.box"
                }
            ]
        }
    ]
}

开始安装:

vagrant box add metadata.json

等待安装完成。安装完成,会有 success 提示的。

编辑 Homestead.yaml

  1. 下载 Homestead 配置。
git clone https://github.com/laravel/homestead.git ~/Homestead 

cd ~/Homestead

# 初始化
bash init.sh

# ssh 秘钥
# 先看看有木有
ls -al ~/.ssh

# 木有就创建,一直回车就可以
ssh-keygen -t rsa -C "your_email@example.com"

# 然后配置 Homestead.yaml 

参考:
https://learnku.com/docs/laravel-development-environment/5.8/development-environment-windows/4373

Homestead.yaml 文件,是配置虚拟机的相关映射设置,以及和本地电脑系统的映射。默认,就有该文件,稍微修改成自己所需的就可以了。如下:

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/Code
      to: /home/vagrant/Code
    - map: ~/Study
      to: /home/vagrant/Study

sites:
    - map: weapp.com
      to: /home/vagrant/Code/weapp/public
    - map: wechat.com
      to: /home/vagrant/Study/wechat/public
databases:
    - wechat
    - weapp

variables:
    - key: APP_ENV
      value: local

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp

至于,改配置的详解,可以百度。

启动

cd ~/Homestead
vagrant up
vagrant provision
vagrant reload
vagrant ssh

如果有以下错误,可以先升级 powershell

The version of powershell currently installed on this host is less than
the required minimum version. Please upgrade the installed version of
powershell to the minimum required version and run the command again.

Installed version: 2

Minimum required version: 3

补救

看到提示 homestead-7: Box 'laravel/homestead' could not be found. Attempting to find and install 了吗。 烦啊,版本不匹配,配置没写对,总之,就是不让你好。

box 名字不对,可以修改 metadata.json 中的 name。 用 vagrant box remove xxx 移除之前的,再 vagrant box add 一次 box。最后, vagrant up再启动看看。 这一切启动,都在从 https://github.com/laravel/homestead 这里 clone 下的目录中进行。目录位置最好存在 ~/Homestead 。如果还有错误,卸载了看流程重装吧。累。

下载参考:

windows7 执行vagrant up 提示powershell版本过低的解决方法


https://www.jb51.net/softs/580141.html

就算之前没有安装 Homestead box,执行 vagrant up的时候,也会去安装的。

参考

https://laravel.com/docs/5.6/homestead

https://laravel-china.org/docs/laravel-development-environment/5.5/development-environment-windows/938

3月 01

什么是 RESTful

RESTful 是一种软件设计风格,由 Roy Fielding 在他的 论文 中提出,全称为 Representational State Transfer,直译为表现层状态转移,或许可以解释为用 URL 定位资源,用 HTTP 动词描述操作,不用太纠结于定义,接下来我们会详细讨论。

RESTful 风格的接口,目前来看,实现的最好的就是 Github API,经常被效仿。接下来我们通过分析 Github API 来引出我们的 API 设计原则。
继续阅读

1月 01

Laravel 5.4默认使用utf8mb4字符编码,而不是之前的utf8编码。因此运行php artisan migrate 会出现如下错误:

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))

[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

那么问题根源,以及怎么解决呢。
继续阅读

12月 28

场景

假如我们要使用七牛的 token

  1. 直接写死在代码调用的地方。 [x]可维护性低
  2. 写在 config/app.php 文件中。[x]无法区分环境进行配置

  3. 存储在 .env 文件中,使用 env() 方法直接读取。 [x]虽然解决了环境问题,但不推荐。

  4. 存储在 .envconfig/app.php 文件中,然后使用 config()函数来读取。 [x] 最佳方案

一种方法是最古老的方法,代码可维护性极低,一旦域名变更就只能全局替换。第二种方法无法区分环境,例如本地使用开发环境域名测试,线上才是正式的 CDN 域名。第三种方法虽然解决了环境变量的问题,并且也具备一定的灵活性,但是不够灵活,假如你的网站流量巨大,需要配置几个 CDN 域名,使其在加载静态资源时随机支配域名,这种做法就无法满足需求了。第四种方法既支持环境变量,又具备极高的灵活性,假如遇到同样的 CDN 多域名随机问题,你只需要写一个辅助方法,然后在 config/app.php 中调用即可,不需要动到任何一行业务逻辑代码。
继续阅读

12月 01

Laravel的auth功能非常好用。只需要按照模板写,几乎不写代码就可以完成注册,登录,忘记密码这一整套流程。但是,仅仅照搬,还是有些不足的。下边列出个人注意的一些知识点,以备以后会用到。

注册

前端表单页面 -> 路由 -> 控制器(RegisterController) + RegistersUsers。
继续阅读

11月 22

前言

使用 laravel 框架,总会使用到其模板引擎 blade。 该引擎的最大优点就是继承和切片。

一个网站通常首部(header),底部(footer)都是一样的。如果每个页面,都通过复制粘贴来实现共通性,就会很累赘。

相同代码的复用,在其他框架中也会有。而blade使用的是继承以及include。
继续阅读

11月 21

初入

  1. Contracts(契约),也就是接口。定义一些方法,所以实现此接口的类都要实现契约里边的方法。
  2. ServiceContainer (契约的具体实现) ,实现 Contracts。具体实现逻辑写在这里。

  3. ServiceProvider (服务提供者) ,绑定事务到服务容器。

  4. App (服务容器), 在服务提供者中,可以通过 $this->appApp:: 得到。 App::其实就是门面。

  5. Facades(门面), 简化服务提供者的调用方式,用静态的方式调用具体实现里的方法。

具体

通过依赖注入,反射,实现了服务的功能。契约定义好服务所需要的接口,当然也可以不需要这个。当类似抽象功能多的时候,还是实现的好。然后,定义契约的实现。在服务提供者中,将服务绑定到容器。最后,在 config\app.php 中的providers,加入服务提供者。如果想使用门面,创建一个门面,然后在门面中重写getFacadeAccessor。最后,也是要在 config\app.php中的aliases加入门面。
继续阅读