Inspirer

推荐阅读

laravel 学习笔记 —— 数据和模型起步篇

来自于分类 笔记

自上一篇 《laravel 学习笔记 —— 神奇的服务容器》 已经有一年了,很多人都问过关于数据库部分的文章什么时候出来。其实不是不想写,而是没法写,因为当时大部分特性都没用到,以至于我无法以笔记形式给出。经过一年时间,laravel 已被我运用在很多类型的项目里,或多或少也对数据库组件了解的比较完整了,是时候完善学习笔记序列重要的环节之一 —— 数据库 部分。

Laravel 有三宝,路由、容器和 Eloquent ORM,Eloquent ORM 实际上是 Laravel 框架数据库组件的一个部分,也是最为重要和常用的,所以我们在说 Laravel 数据库组件时,往往指的是 Eloquent ORM。当然,数据库篇的文章肯定要全面讲述,这样有助于理解,也能帮助一些在这一块遇到问题的朋友。 数据库组件是一个比较独立的组件,其仅仅

【阅读全文】

最新文章

请等待一个新面孔

潜心工作难免疏忽,毕竟没法全心全意去维护博客。

不过心还在,近日仔细构思了一下,正在进行一系列重构。更多人在这个博客上可能更为关注 laravel 的一些内容。但是只是会用 laravel,也永远只会停留在浅薄的认识,我希望借助这个小小的地方发表我作为 PHPer 更多的愿景。PHP 也许不是最好的语言,但是却是一个值得把玩的语言,因为借助这门语言,可以很容易以此为跳板,去开启更多地新世界的大门。

近日的工作,忙碌中出现了很多失误,反思总结后,才更加坚定了走得太快迟早会扯蛋的这一认识。于是应当做出一些改变,也正如无数人反应的样式问题。

不过还是要说一下,,黑色的样式是为了便于长期在深夜工作的我眼睛着想。。。不过考虑到大家一般在白天看,我还是会调整回来的。

哦对了,这只是一篇小记,没什么干货。:joy: :joy:,干货很快就有了,别急。

MySQL5.7 的编译安装

一直嫌弃 MySQL 的编译安装,原因很简单,依赖复杂、容易出错,总之就是麻烦。但这些天由于需要必须编译安装,被迫阅读相关文档,发现现在的 MySQL 安装变得十分简单和容易。

直接开始吧。

一切从必要依赖开始。

yum install -y gcc gcc-c++ ncurses-devel perl

本文中系统为 CentOS 7,不同系统的软件包管理器可能用法不同,但需求类似,请准备好 gcc gcc++ ncurses 及 perl 相关编译器或依赖库即可。

扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题

最近由于项目开发需要,手机客户端和网页端统一使用一套接口,为保证 会话(Session) 能够正常且在各类情况下兼容,我希望能够改变 SessionID 的获取方式。默认情况下,所有网站都是通过 HTTP 请求的 Header 头部中的 Cookie 实现的,通过 Cookie 中指定的 SessionID 来关联到服务端对应数据,从而实现会话功能。

但对于手机客户端,可能并不会支持原始的 Cookie,亦或者根据平台需要而屏蔽,因此开发中要求通过增加一个请求头 X-Session-Token 来标识 SessionID。在 Laravel 框架中,实现 Session 初始化、读取和启动,都是通过 Illuminate\Session\Middleware\StartSession 这个中间件实现的,该中间件有一个关键方法 getSession,这个方法就是获取 SessionId 从而告知 Session 组件以什么凭据恢复 Session 数据。

该中间件注册于 app/Http/Kernel.php 文件下。

我新建了一个类继承该中间件,同时替换了在 app/Http/Kernel.php 下的注册的地方,原来的 getSession 方法源码如下:

public function getSession(Request $request)
{
    $session = $this->manager->driver();
    $session->setId($request->cookies->get($session->getName()));
    return $session;
}

在新的中间件中,我修改为:

public function getSession(Request $request)
{
    $session = $this->manager->driver();
    // 判断是否是接口访问并根据实际情况选择 SessionID 的获取方式
    if ($request->headers->has('x-session-token')) {
        $sessionId = $request->headers->has('x-session-token');
    } else {
        $sessionId = $request->cookies->get($session->getName());
    }
    $session->setId($sessionId);
    return $session;
}

但是麻烦也随之而来。。。

PHP 7 的编译安装

之前有一篇 《PHP 7 开发版本编译安装》,不过那时候连 RC 版都不是,昨日正式版已经在 Github 上发布(参见: https://github.com/php/php-src/releases) ,于是乎迫不及待的在此分享其编译安装的过程。

其实 php 的编译安装相当简单,且每个版本差异不大,正因为如此之前版本的编译安装过程也可以参考,当然,需要注意的是,每个版本的编译参数存在部分差异,以 ./configure --help 中具体描述的编译配置参数为准。

本文中系统环境为 CentOS 7 64bit,如使用其他系统环境的,请注意在某些 依赖安装环节 的差异。

HTTP 中的幂等操作

在做 web 端开发,常常和各种请求打交道。HTTP 协议中,常见的请求不外乎是 GETPOSTPUTDELETEHEAD。其中,GET、PUT、DELTE、HEAD 都是幂等操作,而 POST 则不是。那么什么是幂等操作?其存在的意义和网站的设计与架构有什么关系呢?

IE 死活无法保存 cookie 的问题(去屎吧 IE)

近日在公司遇到了一件奇葩问题 —— IE 死活无法保存 Cookie!

在平日一切正常,那天就出了这么一出问题,可问题是前两天还正常运行呢。Cookie 无法保存带来的一系列问题让人无比抓狂,但就是找不清楚问题在哪(好吧我承认对 IE 真的不了解)。按道理,并没有限制 IE 的 Cookie 功能,没有设置什么,也没有改动什么,而且其他网站依旧能够正常保存 Cookie。

问题原因到底是啥呢?

替换 laravel 分页组件默认生成的模板

在使用 Laravel 分页功能时,需要配合使用前端框架 Bootstrap 的分页组件,这两者结合甚为紧密。可是由于我的博客更换为 AmazeUI,而 AmazeUI 分页组件使用的 CSS 类选择器是 .am-pagination 而不是 Bootstrap 的 .pagination

那么如何在不修改框架代码的前提下替换默认的 Laravel Pagination 生成的 html 模板呢?本文将通过利用 Laravel Service Provider (服务提供者)实现该需求。通过了解本文的内容大家也可以实现更多的分页样式。

使用 xunsearch 构建全文搜索功能

很多人希望自己的站点拥有一个强大的搜索功能,用于检索自己站点上的内容,以便于用户访问时快速寻找有用信息。一般的方式是利用 SQL 的 LIKE 语句。但是这样的检索命中率底下且效率不高,其次是程序逻辑实现更为复杂,对于简单的搜索勉强行得通,如果想实现更为高级的效果,就需要使用全文搜索引擎

大家肯定听说过 SphinxElastic searchXunsearch(讯搜) 或者其他全文搜索引擎。由于讯搜天然支持中文分词,也就成为了我的第一选择。本篇博客内容仅针对大致的架设方法讲解,作为国内开发的全文搜索引擎,文档也很清晰,建议有更多需求的去阅读官方网站下的 SDK 文档:xunsearch 官方网站

博客换装——“灵感”的新面孔

在一个多月中想法设法的挤出时间,调整了博客的模板,算是给自己一个满意的交代吧。

常关注我这个博客的朋友,应该发现我很喜欢 Dark Theme,包括我的代码编辑器在内,都趋向这种色调。但之前由于模板的设计很仓促,问题相当多,最大的问题就是对比度过高,看着及其费眼睛。于是经过这段时间慢慢调优,才有了现在的新面貌。