Inspirer

推荐阅读

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

来自于分类 笔记

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

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

【阅读全文】

最新文章

访问控制工具 —— iptables

我是一个十分怕麻烦的人。很不幸,学习 linux 真的有时候很麻烦,因为这个系统真的非常不友好,包括这个系统下面的一系列软件和工具,简直不人道。不要试图以高高在上的姿态告诉我命令行是一种人性化的操作模式,这就是放屁。好了,抱怨到此为止。至于为什么要抱怨,原因恰好是今天的主角 —— iptables

我不喜欢 linux 系统的很多工具主要是复杂的命令记忆。iptables 正是如此。不过,也正是这样复杂的工具,提供了无比精细的控制能力。本文作为我个人学习这个工具的笔记,希望能够给同样在学这个的朋友提供一些小小的帮助。

iptables,一个运行在用户空间的应用软件,通过控制Linux内核netfilter模块,来管理网络数据包的流动与转送。

通常iptables都需要内核层级的模块来配合运作,Xtables是主要在内核层级里面iptables API运作功能的模块。因相关动作上的需要,iptables的操作需要用到超级用户的权限。

—— 摘自维基百科

开启 Nginx 的 Gzip 压缩功能

昨天把博客的服务端由 Apache 换成了 Nginx,发现 Nginx 在某些方面的确更易于使用。至少更为小巧玲珑。同 Apache 类似,两者都内置了 Gzip 模块,通过配置文件直接开启即可,十分方便。本篇文章只是做一个笔记,记录一些东西以便帮助大家。很多内容源自网络,我尽量选取比较详细且有价值的。

开启 Gzip 模块

编辑 Nginx 的配置文件,一般都会看到有这样一个注释了的东西:

# gzip on;

只需要将前面的 # 去掉即可开启 Gzip 模块。当然整个过程显得太简单也不会满足各类人群的要求。我们继续。

laravel 学习笔记 —— 神奇的服务容器

竟然有人认为我是抄 Laravel 学院的,心塞。世界观已崩塌。

容器,字面上理解就是装东西的东西。常见的变量、对象属性等都可以算是容器。一个容器能够装什么,全部取决于你对该容器的定义。当然,有这样一种容器,它存放的不是文本、数值,而是对象、对象的描述(类、接口)或者是提供对象的回调,通过这种容器,我们得以实现许多高级的功能,其中最常提到的,就是 “解耦” 、“依赖注入(DI)”。本文就从这里开始。

IoC 容器, laravel 的核心

Laravel 的核心就是一个 IoC 容器,根据文档,称其为“服务容器”,顾名思义,该容器提供了整个框架中需要的一系列服务。作为初学者,很多人会在这一个概念上犯难,因此,我打算从一些基础的内容开始讲解,通过理解面向对象开发中依赖的产生和解决方法,来逐渐揭开“依赖注入”的面纱,逐渐理解这一神奇的设计理念。

本文一大半内容都是通过举例来让读者去理解什么是 IoC(控制反转)DI(依赖注入),通过理解这些概念,来更加深入。更多关于 laravel 服务容器的用法建议阅读文档即可。

CentOS 下编译安装 Nginx 1.8.0 和 PHP 5.6.8

说来惭愧,这么久还没有体验一下 Nginx 。今天说什么也要尝试一下对吧?我就先从我个人常用的 web 服务器来渐渐熟悉 Nginx。

准备

本文系统环境为 CentOS 6.6,在其他发行版本的 linux 下编译安装方法基本相同,仅需注意安装过程中所需的依赖库是否被安装,若没有安装可自行查阅相关依赖的安装方式。

安装 php 5.6.8 的方法及过程请参考该文章 《Linux 下 编译安装 Apache 2.4 和 php 5.6》,务必注意根据个人需要替换文中的可选项。

我们先下载必要的组件: PCRE-8.39 (ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz) Nginx (http://nginx.org/download/nginx-1.8.0.tar.gz

用 php 实现一个视图组件和模板引擎——基础

只要不是做后端接口开发和一些作为守护进程之类的服务器脚本,大多数时候都是在和浏览器打交道,因此合理组织并展现 html 标签是最为常见的工作。一般大家使用框架时,都会自带有一套视图组件和模板引擎。

我们不讨论这些组件和引擎的好坏。因为这些东西已经经过考验,可以在生产环境下使用。我们现在只是为了学习一些东西,这时候了解一些原理上的可能对以后的帮助更大,如果一些人真的很有时间,利用这些基础知识完全可以写一个自己的组件,即可当做练习,也可以拿去自用。

好了,说这么多,我还是希望很多人明白,视图和模板引擎实际上原理十分简单,所涉及的知识可以说是太基础不过的了。但,千万不要把视图和模板引擎搞混淆,这两个真的不是一个东西 :satisfied:。

为了理解这些,我们先从视图开始了解。

laravel 学习笔记——视图

视图,你所看见的部分。

很多人下意识的将视图和模板引擎挂钩,这是一种非常不正确的想法。我们称用于实际负责输出(可视)数据的就叫做视图。

因此,视图不是模板引擎。

<?php
echo 'Hello, world';

上面的这段代码,我们可以称之为视图,因为这段代码输出了对于客户端可视的内容。

理解了这一点,我们就可以愉快的去了解 laravel 的视图。对于框架而言,视图是作为框架的组成部分之一,框架中的视图,其职责更为单一,不再负责数据的读写、处理,而仅仅负责呈现。这样一个职责独立的视图,就需要外部提供数据,也需要外部的调度。而 laravel 的 View 类则正是负责这一工作的。

建议读者先去阅读本人的另一篇文章: 用 php 实现一个视图组件和模板引擎——基础 https://www.insp.top/use-php-to-achieve-view-component-and-template-engine

Linux 下 编译安装 Apache 2.4 和 php 5.6

本文章所基于的 linux 系统发行版为 CentOS 6.6。本文默认读者已安装好 mysql,若没有则在安装 mysql 扩展时会出现问题。

准备

先下载好以下源码包

请确认系统中已安装了 GCC(GCC,GCC-C++)、make、autoconf 和 automake。恩,除了这些还有一堆依赖库。为了避免麻烦,您可以直接这样:

yum install -y gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libpng libpng-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses curl openssl-devel gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel readline-devel libxslt-devel expat-devel xmlrpc-c xmlrpc-c-devel

其他没有 yum 的系统可以通过其他类似方式(如 ubuntu 的 apt-get)进行安装。

laravel 学习笔记——请求与响应

我们在前面的一篇文章 laravel学习笔记——路由(基础) 中提到了 HTTP 请求的大致内容。关于 HTTP 协议,一定要有个大致了解。

本文主要是帮助大家理解 laravel 的请求和响应部分。但我们在学习这一块之前,我会脱离 laravel 框架,单独讲述一些概念,让大家消除很多疑虑,这有助于降低 laravel 的学习难度(至少从思想层面)。本文还希望通过介绍,让大家清晰一些概念,让框架本身不再神秘。

很多人常常疑惑,为什么在 laravel 中控制器的方法、路由的匿名函数里,我们用的不是类似 TP 框架中的 $this->display() 输出视图,而是用 return view() 这种方式,或者说,为什么不是通过 echo、print这类输出内容而是一定要 return 呢?返回的数据究竟怎么被框架所处理?这期间发生了什么?直接输出和返回两者的区别在哪里?我们这篇文章不但要告诉你发生什么,还会就这一块诸多已有的疑惑、可能有的疑惑做出详细讲解。

本文中的例子依旧大致参考官方文档(或各类翻译的版本),因此在阅读本文的同时,一定不要脱离文档。

再次强调:请阅读本文之前,务必大致了解 HTTP 协议!

laravel 学习笔记——路由(路由与控制器)

目前我们大致了解了 laravel 下,在开始一个 Http 程序需要先定义路由。之前的例子中,我们的业务逻辑都是在路由里实现,这对于简单的网站或 web 应用没什么问题,当我们需要扩大规模,程序变得复杂,分层的业务逻辑更为适合。这时候,我们就应该使用控制器。

了解 MVC 的都对控制器的作用有所了解,控制器是实现主要业务逻辑的。在其他框架,控制器一般就是一个类,laravel 也不例外,laravel 的控制其结构并没有什么特殊。

<?php 
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class HomeController extends Controller {

    /**
     * 显示首页。
     *
     * @return Response
     */
    public function index()
    {
        return view('home');
    }

}

上述例子中就是 laravel 的控制器结构,没什么特别的。可以看得到,Laravel 的控制器非常的干净,与其他类的耦合度相当的低。得益于 laravel 的 IoC 容器,我们很容易实现相当丰富的功能,且不会产生紧密耦合。那么如何才能访问到这个控制器里的逻辑呢?

我们所知道的许多框架,通常有着既定的路由规则,我个人比较熟悉 TP,TP 的默认路由规则是 http://yourdomain/Module/Controller/Action,假如我们访问 http://yourdomain/Content/Home/index,默认会将请求派发至 Content 模块下的 HomeController类的 index 方法。

ThinkPHP 这种默认路由规则使得框架开箱即用,十分便捷。但是这样并不灵活,假如我想通过访问 http://yourdomain/user/1 就访问到 UserController 控制器下的 show 方法并包含一个值为 1 的参数,ThinkPHP 你需要修改配置(并且那个配置非常不优雅),亦或者我想要通过向 http://yourdomain/topic POST 一个数据以添加一篇文章,处理这个过程的实际是 Admin\TopicController 类的 create 方法,且该方法只接受 POST 请求,这时候似乎大多数框架就要通过写更多的代码实现了。

说到这里,似乎大家是不是想起了 laravel 那种路由定义方式的好处了?虽然 laravel 没有强加给你既定的路由规则,但你拥有了更多定制的权利,并且 laravel 定义路由的方式非常优雅,带给你的体验非常丰富。另一个好消息是,定义控制器路由和普通路由有所差别,这个差别是在便利性上的,你将很快感受到这种便利带给你的好处!

说到现在,已经积累了很多疑惑,我们现在开始正式讲述 laravel 的控制器与控制器路由。