Write the Code. Change the World.

分类目录
6月 10

摘要

版本格式:主版本号.次版本号.修订号,版本号递增规则如下:

  1. 主版本号:当你做了不兼容的 API 修改,
  2. 次版本号:当你做了向下兼容的功能性新增,
  3. 修订号:当你做了向下兼容的问题修正。

先行版本号及版本编译元数据可以加到“主版本号.次版本号.修订号”的后面,作为延伸。
继续阅读

6月 04

homestead 默认情况,在本机,是可以通过配置的域名访问虚拟机中的站点。可是,你的同事(其他)电脑是访问不了你的站点。既想你同事能访问,又不想用 ip。修改下配置,即可以实现。

这种需求,虽然不常见,但很有必要。因为你们自己没有公网服务器或不方便公网服务器用来测试。而刚好你的修改又需要特殊的测试,这个时候,这种需求就非常有用了。

操作一波

# win10
ipconfig

# mac
ifconfig

# 找到自己的 ip 192.168.1.101(后边会用到)

# 假如你之前已经启动了虚拟机,先关掉比较好
exit
vagrant halt

继续阅读

4月 03

lumen 是一个由 Laravel 组件搭建而成的微框架,是当前最快的 PHP 框架之一!

Lumen 专为微服务或者 API 设计,对 Laravel 优化了框架的加载机制, 所以 Lumen 对资源的要求少很多,速度也比laravel快很多; 因师承Laravel,所以Lumen 向 Laravel 迁移是很容易的事情。 Lumen目前是1.0 版本,基于 Laravel 5.x 开发。(Lumen 没有使用 Symfony 的路由模块, 而是采用了速度更加快的 nikic/fast-route。)
继续阅读

4月 03

安装 lumen 后,使用 php artisan make:controller XXX 时出错。于是,查看了下相关的命令(php artisan list),发现对比 laravel 缺失了很多命令。

遇到这个问题的,都是使用过 lumen的。遇到这个问题的,也有人解决这个问题。请看:https://github.com/webNeat/lumen-generators

github 上已经介绍了怎么安装使用。这里再啰嗦一下。

  1. 安装。
composer require wn/lumen-generators
  1. 注册服务。
    app/Providers/AppServiceProvider.php 中添加:
public function register()
{
    if ($this->app->environment() == 'local') {
        $this->app->register('Wn\Generators\CommandsServiceProvider');
    }
}
  1. bootstrap/app.php 中注册。添加:
$app->register(Wn\Generators\CommandsServiceProvider::class);
  1. 再次查看和使用。
php artisan list //已经追加了一些新命令

php artisan wn:controller Lover //创建控制器,连带的路由也创建了
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 中调用即可,不需要动到任何一行业务逻辑代码。
继续阅读

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加入门面。
继续阅读