Laravel框架的体系结构

Laravel被称为“全栈”式框架,因为它能够处理从网络服务到数据库管理、HTML生成的一切事情,垂直集成的web开发环境给开发者提供了更好的体验。

开发人员可以通过命令行工具,生成和管理Laravel项目环境。Laravel附带了一个名为Artisan的优秀的命令行工具,它提供了一些开发过程中有用的命令用,可以用来生成框架代码和数据库管理。它是基于强大的Symfony Console 组件开发的。

Laravel的目标是给开发者创造一个愉快的开发过程,并且不牺牲应用的功能性。快乐的开发者才能创造最棒的代码!为了这个目的,我们博取众框架之长处集中到Laravel中,这些框架甚至是基于Ruby on Rails、ASP.NET MVC、和Sinatra等开发语言或工具的。

Laravel是易于理解并且强大的,它提供了强大的工具用以开发大型、健壮的应用。杰出的IoC、数据库迁移工具和紧密集成的单元测试支持,这些工具赋予你构建任何应用的能力。

目录结构

这是所有laravel项目具有基本上相同的目录结构,其中的每个文件都具有指定的地方。通过对目录结构的约定,确保你是按照“laravel方式”来工作。

正如你看到的,laravel项目下面有4个文件夹:appbootstrappublicvendor,这4个文件夹下面又有很多个子文件夹,当你第一次看到这么丰富的文件夹内容时,是不是觉得很有压力?没关系,我们会逐一的来了解不同的文件夹。

文件夹 描述
app 包含了站点的controllers(控制器),models(模型),views(视图)和assets(资源)。这些是网站运行的主要代码,你会将你大部分的时间花在这个目录里。
bootstrap 用来存放系统启动时需要的文件,这些文件会被如index.php这样的文件调用。
public 这个文件夹是唯一外界可以看到的web服务器的目录。它含有laravel框架核心的引导文件index.php,这个目录也可用来存放任何可以公开的静态资源,如css,Javascript,images等。
vendor 用来存放所有的第三方代码,在一个典型的Laravel应用程序里,这个目录包括Laravel源代码及其相关文件,并含有额外的预包装功能的插件。

app目录

正如上面提到的,所有laravel中有趣的事情都会产生在app目录,让我们多了解一些里面的内容。

每一项的作用,我们列出个表来描述:

文件/文件夹 描述
/app/config/ 配置应用程序的运行时规则、 数据库、 session等等。包含大量的用来更改框架的各个方面的配置文件。大部分的配置文件中返回的选项关联PHP数组。
/app/config/app.php 各种应用程序级设置,即时区、 区域设置(语言环境)、 调试模式和独特的加密密钥。
/app/config/auth.php 控制在应用程序中如何进行身份验证,即身份验证驱动程序。
/app/config/cache.php 如果应用程序利用缓存来加快响应时间,要在此配置该功能。
/app/config/compile.php 在此处可以指定一些额外类,去包含由‘artisan optimize’命令声称的编译文件。这些应该是被包括在基本上每个请求到应用程序中的类。
/app/config/database.php 包含数据库的相关配置信息,即默认数据库引擎和连接信息。
/app/config/mail.php 为电子邮件发件引擎的配置文件,即 SMTP 服务器,From:标头
/app/config/session.php 控制Laravel怎样管理用户sessions,即session driver, session lifetime。
/app/config/view.php 模板系统的杂项配置。
/app/controllers 包含用于提供基本的逻辑、 数据模型交互以及加载应用程序的视图文件的控制器类。
/app/database/migrations/ 包含一些 PHP 类,允许Laravel更新当前数据库的架构并同时保持所有版本的数据库的同步。迁移文件是使用Artisan工具生成的。
/app/database/seeds/ 包含允许Artisan工具用关系数据来填充数据库表的 PHP 文件。
/app/lang/ PHP 文件,其中包含使应用程序易于本地化的字符串的数组。默认情况下目录包含英语语言的分页和表单验证的语言行。
/app/models/ 模型是代表应用程序的信息(数据)和操作数据的规则的一些类。在大多数情况下,数据库中的每个表将对应应用中的一个模型。应用程序业务逻辑的大部分将集中在模型中。
/app/start/ 包含与Artisan工具以及全球和本地上下文相关的自定义设置。
/app/storage/ 该目录存储Laravel各种服务的临时文件,如session, cache, compiled view templates。这个目录在web服务器上必须是可以写入的。该目录由Laravel维护,我们可以不关心。
/app/tests/ 该文件夹给你提供了一个方便的位置,用来做单元测试。如果你使用PHPUnit,你可以使用Artisan工具一次执行所有的测试。
/app/views/ 该文件夹包含了控制器或者路由使用的HTML模版。请注意,这个文件夹下你只能放置模版文件。其他的静态资源文件如css, javascript和images文件应该放在/public文件夹下。
/app/routes.php 这是您的应用程序的路由文件,其中包含路由规则,告诉 Laravel 如何将传入的请求连接到路由处理的闭包函数、控制器和操作。该文件还包含几个事件声明,包括错误页的,可以用于定义视图的composers。
/app/filters.php 此文件包含各种应用程序和路由筛选方法,用来改变您的应用程序的结果。Laravel 具有访问控制和 XSS 保护的一些预定义筛选器。

我们通过上面的表格可以看到,只要花一些心思在建立和命名的文件上,就能得到一个具有良好文件系统的结构化的应用。

模型-视图-控制器(MVC)

让我们更深一步了解如何建立laravel应用。你可能已经注意到,app目录下面有三子目录:modelsviewscontrollers。这是表明了laravel是model-view-controller(MVC)架构模式,它将“业务逻辑”与图形用户界面相关的输入和显示逻辑(GUI)分离。在laravel Web应用中,业务逻辑通常由数据模型(如用户,博客文章)组成,GUI则只是一个浏览器中的页面。MVC设计模式在Web的开发领域中非常受欢迎。

MVC模式的三个要素:

  • 模型(model)
  • 视图(view)
  • 控制器(controller)

Laravel的响应流程

一个典型的laravel应用程序由上面提到的MVC组成,如下图:

当访问一个laravel应用程序时,浏览器发送一个请求,由Web服务器接收并传递到laravel的路由引擎。该laravel路由器接收到请求后,根据配置重定向到相应的控制器类的方法。

然后由控制器类接管。在某些情况下,控制器将立即渲染一个视图,这是一个模板,将被转换成HTML并且发送回浏览器。更普遍的动态网站,控制器与模型进行交互,与数据库进行通信。调用模型后,控制器呈现最终视图(HTML、CSS和图像)并返回完整的web页面到用户的浏览器。

Laravel提倡模型、视图和控制器,应保持完全独立的存储单独的文件在不同的目录。这就是laravel的目录结构发挥作用的地方。

像MVC这样的设计模式的产生,就是为了让开发者的工作更加轻松。这就是Laravel比那些不用任何模式的PHP厉害的地方。如果这种讨论你现在感觉很抽象,不用担心!当你开始用Laravel工作,你都不会意识到你是在一种设计模式中工作。过一段时间后,就会变得自然了。

数据模型

数据模型是任何应用程序的基础,它建立了应用程序的业务逻辑。每一块数据通过使用一个数据库表表示。laravel提供了一些技术来简化对数据库的访问。

Laravel通过将数据库中的表行转成能被轻松操纵的PHP对象,来连接应用程序的数据模型和数据库表。它还使您能够执行业务规则,描述在应用程序中不同的数据模型之间的关系等。例如,一个人的家庭关系可以用Laravel Eloquent OR / M描述如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Person extends Eloquent
{
public function mother()
{
return $this->belongsTo('Mother');
}
public function father()
{
return $this->belongsTo('Father');
}
public function spouse()
{
return $this->hasOne('Spouse');
}
public function sisters()
{
return $this->hasMany('Sister');
}
public function brothers()
{
return $this->hasMany('Brother');
}
}
Wow