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。
- 直接写死在代码调用的地方。 [x]可维护性低
-
写在 config/app.php
文件中。[x]无法区分环境进行配置
-
存储在 .env
文件中,使用 env()
方法直接读取。 [x]虽然解决了环境问题,但不推荐。
-
存储在 .env
和 config/app.php
文件中,然后使用 config()
函数来读取。 [x] 最佳方案
一种方法是最古老的方法,代码可维护性极低,一旦域名变更就只能全局替换。第二种方法无法区分环境,例如本地使用开发环境域名测试,线上才是正式的 CDN 域名。第三种方法虽然解决了环境变量的问题,并且也具备一定的灵活性,但是不够灵活,假如你的网站流量巨大,需要配置几个 CDN 域名,使其在加载静态资源时随机支配域名,这种做法就无法满足需求了。第四种方法既支持环境变量,又具备极高的灵活性,假如遇到同样的 CDN 多域名随机问题,你只需要写一个辅助方法,然后在 config/app.php
中调用即可,不需要动到任何一行业务逻辑代码。
继续阅读
12月
10
先安装 virtualbox, 以及 vagrant 。 这两个都是免费软件。默认安装即可。安装 virtualbox 时,记得要运行它的pkg文件。
再来安装 homestead.box。
继续阅读
12月
01
Laravel的auth功能非常好用。只需要按照模板写,几乎不写代码就可以完成注册,登录,忘记密码这一整套流程。但是,仅仅照搬,还是有些不足的。下边列出个人注意的一些知识点,以备以后会用到。
注册
前端表单页面 -> 路由 -> 控制器(RegisterController) + RegistersUsers。
继续阅读
12月
01
什么是
- 什么是 VirtualBox。
-
什么是 Vagrant。
-
什么是 Homestead。
VirtualBox
VirtualBox 是 Oracle 公司的开源虚拟机软件。VirtualBox号称是最强的免费虚拟机软件,它不仅功能齐全,而且性能也很优异!VirtualBox 支持大部分流行的系统,如:Mac, Windows, Linux 等。
继续阅读
11月
22
前言
使用 laravel 框架,总会使用到其模板引擎 blade。 该引擎的最大优点就是继承和切片。
一个网站通常首部(header),底部(footer)都是一样的。如果每个页面,都通过复制粘贴来实现共通性,就会很累赘。
相同代码的复用,在其他框架中也会有。而blade使用的是继承以及include。
继续阅读
11月
21
初入
- Contracts(契约),也就是接口。定义一些方法,所以实现此接口的类都要实现契约里边的方法。
-
ServiceContainer (契约的具体实现) ,实现 Contracts
。具体实现逻辑写在这里。
-
ServiceProvider (服务提供者) ,绑定事务到服务容器。
-
App (服务容器), 在服务提供者中,可以通过 $this->app
或App::
得到。 App::
其实就是门面。
-
Facades(门面), 简化服务提供者的调用方式,用静态的方式调用具体实现里的方法。
具体
通过依赖注入,反射,实现了服务的功能。契约定义好服务所需要的接口,当然也可以不需要这个。当类似抽象功能多的时候,还是实现的好。然后,定义契约的实现。在服务提供者中,将服务绑定到容器。最后,在 config\app.php
中的providers
,加入服务提供者。如果想使用门面,创建一个门面,然后在门面中重写getFacadeAccessor
。最后,也是要在 config\app.php
中的aliases
加入门面。
继续阅读
11月
11
场景
数据存储在mysql数据库中。在一个离散的一段时间内(开始时间到结束时间),求出每隔一个小时,用户消费的金币。
这时,就需要将这一段时间以小时来分割了,然后groupby。
该怎么做呢。
实现
时间通常是 datetime 或 timestamp 。通过 DATE_FORMAT
,我们可以对时间进行分段。
比如:
%H
0-23小时
%S
00-59秒
所以可以这样:
select sum(coin), DATE_FORMAT(log_time, "%H") as h from gift_tb where log_time >= '2017-11-10 00:00:01' group by h
看起来是可以了。可是如果时间总长度大于1天呢。或是我需要30分钟来分割,10分钟来分割。这样显然是不行的。
好吧,路总是要人走的。
计算的根本还是时间,那不如将时间稍微处理下。
公式: floor( (记录时间 - 时间段的开始时间)/ (60 * 60) ) as h
于是就有了:
select sum(coin), floor((UNIX_TIMESTAMP(log_time) - 1510243200)/(60 * 60)) as h from gift_tb where log_time >= '2017-11-10 00:00:01' group by h
参考
http://www.w3school.com.cn/sql/func_date_format.asp
http://blog.csdn.net/zhuyu_deng/article/details/43409547
11月
06
方法一
使用 composer 根据需要安装具体版本的laravel
// php 5.6.4以下版本最高安装laravel5.2
composer create-project --prefer-dist laravel/laravel blog "5.2.*"
blog 为项目名,文件都被安装在blog目录下
如果安装完成后,发现没有安装vendor。请不要担心,请将 php.ini 里面的mbstring extension=php_mbstring.dll
打开。
方法二
- 下载laravel安装包。
composer global require "laravel/installer=~1.1"
- 将
~/.composer/vendor/bin
路径添加到系统环境变量中, 这样 laravel 执行文件就会存在你的系统。
-
创建项目。
// XXX 为项目名
laravel new XXX
参考:https://docs.golaravel.com/docs/5.2/installation/