Inspirer

最新文章

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 的控制器与控制器路由。

laravel 学习笔记——路由(基础)

学习 laravel 必须要学习其路由,路由是 laravel 的特色,更是一个重中之重。是体验 laravel 优雅和美妙的第一站。

此路由非彼路由,不要和路由器的路由搞混淆了,虽然他们都有着分发请求的作用。

在这里,路由是指分析来自客户端请求的统一资源标识符(URI),根据设定的规则将请求分发至期待的处理逻辑,这一规则就是路由规则,而这一过程就是路由。

假设我们有这样一段简单的处理逻辑:

echo 'hello, world';

我希望通过 URL http://yourdomain/host 访问到这段处理逻辑,我们的路由规则就应该是 /host ,该规则接受的请求类型是 GET。如何在 laravel 内实现呢?我们通过编辑 laravel 框架目录下的app/Http/routes.php,添加以下代码:

Route::get('host', function() {
    echo 'hello, world';
});

就实现了我们之前所想的那样。通过这样一段简单的示例,我们至少应该明白路由是干啥的,其实就是用来匹配请求地址的。很多人不习惯是由于之前的框架已经给你制定好了一套规则,而现在,这个选择权全在于你,你拥有定制规则的最高权限。所以,这不是麻烦,而是更加灵活。让我们继续深入了解,你会爱上他的。

laravel 学习笔记——起点

laravel

本系列文章主要是方便初学 laravel 的人入门,帮一些朋友认识到如何入门、如何学习 laravel,同时补充一些忽略过的基础知识。

Laravel 给了我学习新知识的一个契机,让我更早的接触更多的东西。我现在这个博客就是用 laravel 编写的。

刚学习 laravel 其实是一个痛苦的过程,不过痛苦过后,世界大不一样。原因就是造成痛苦的,不是 laravel 难,而是思想的陈旧带来的。laravel 本身也没有运用什么超前的理念,但即使是炒的旧饭,也比馊了的来得美味一些。既然旧饭要炒一下,那就得费点小小的力气。剩饭也香啊,尤其是撒了葱花之后:sweat_smile: :sweat_smile::smirk:。

学得越多,就应该记下来,这一系列笔记,也希望能够帮助大家。

由于网络上已经将 laravel 的安装步骤说的足够详细,本人也是通过这些方式安装的,没有什么特殊之处。关于安装就不在本内容中讨论,但我会在另一篇文章内讲述 composer 相关的内容的时候,聊一聊这一部分。

好了开始吧。

匿名函数的那些事儿

本文依旧以php为主。

匿名函数,说白了就是“没有名字的函数”,恩废话。给一段代码可能更为直白:

$foo = function() {
    // this is a closure
}

对,这就是匿名函数,没什么特别的,和一般函数结构神似,唯独少了个函数名。而且这个函数可以作为一个值被赋予一个变量或者对象属性。这种特性使得拥有匿名函数的编程语言再设计一些应用时,更为灵活。

闭包——藏在代码中的“房间”

“闭包”这词儿是学javascript时听来的。没错,听来的。我一直对这个词所代表的学术概念嗤之以鼻,不为别的,就因为这些概念严重的欺负了我对概念性知识的超弱理解能力。正是如此,让我一直对明确其概念这一行为抱有深深的芥蒂。

不过,哪能跟自己过不去呢?于是,在不断学习新事物的同时,不知不觉中就慢慢领会了这个小家伙的神奇之处。

由于本人写此文时主要偏好于php,主要以php中的闭包作为阐述对象,其他语言的闭包概念与其产生的冲突,若是我了解的,我会补充说明。好吧,还是聊聊闭包——藏在代码中的“房间”。

灵感——来自生活的馈赠

开始在这个地方写一些文章、笔记,不应该是一件很难得的事。但是也正是因为“不难得”才让这件事被许多琐事所埋没,太多的“难得”占据了生活中太多的过去,也是时候腾出一些未来,留给属于自己的空间。也正是在突然停下来的时候,才不断发现,偶尔的灵光乍现,却是来自生活不断给予的礼物之一。——这算是这个博客开始的祝词吧。