Laravel 应用程序的体系结构(转)

在一切环境就绪了,当然就要开始了解框架了。

  站在巨人的肩膀上,学东西会事半功倍。我在网上找到一篇好文章,正好可以让我轻松了解Laravel应用程序的体系结构。因此借来直接用了。

  该章节内容翻译自《Architecture of Laravel Applications》,一切版权为原作者,由于原作者写这篇文章时Laravel版本还没有到4.1,一些地方有稍微差别,我会稍作修改。

  原作者:Stable Host, LLC(不知道找对了没有)

  翻译作者:Bowen Huang

  公司:http://www.novasoftware.cn , http://www.novasoftware.com/developer/laravel.aspx

正文:

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

  一个典型的程序员通过命令行工具与Laravel交互,生成和管理Laravel项目环境。Laravel带有一个名为Artisan的优秀的命令行工具,可以用它来生成框架代码和数据库架构,Artisan能够处理从数据库架构迁移到资源和配置管理的一切事情。

约定优于配置

  Laravel 的有趣的特征之一,在如何构建 web 应用程序上它规定了一些相当严重的限制。出人意料的是,这些限制使创建应用更加的容易——轻松了很多。让我们来看看为什么。

  Laravel区别于其他垂直集成开发环境在于它强烈的偏好约定优于配置。而一些 Java,Python 或 PHP 框架往往需要大量的 XML 配置,Laravel在开始的时候几乎不需要配置(也许只有几行在PHP中)。这种对配置文件的规避行为使其非常独特,在所有 Laravel 应用程序中可识别的代码结构是相同的。

一个项目结构来统治他们所有 !

  这并不奇怪,所有Laravel项目基本上具有相同的目录结构 ——在其中的每个文件都有其指定的地方。通过这种约定的目录结果,可以确保开发者按照“Laravel way”工作。

  图 1.1 显示了 Laravel 项目目录结构是什么样子:

图1.1 Laravel 项目目录结构

  就如你看到这样,laravel下面只包含了4个文件夹,这4个文件夹下面有一些子文件夹,这种丰富的子文件夹在第一次看到是不是有压力?我会逐个介绍。我们大部分的开发工作都会在app/文件夹下面进行。

  下面是各个文件夹和文件的基本介绍:


顶级文件夹


作用


app


包含了站点的controllers(控制器),models(模型),views(视图)和assets(资源)。这些是网站运行的主要代码,你会将你大部分的时间花在这些上面。


bootstrap


用来存放系统启动时需要的文件,这些文件会被如index.php这样的文件调用。


public


这个文件夹是唯一外界可以看到的,是必须指向你web服务器的目录。它含有laravel框架核心的引导文件index.php,这个目录也可用来存放任何可以公开的静态资源,如css,Javascript,images等。


vendor


用来存放所有的第三方代码,在一个典型的Laravel应用程序,这包括Laravel源代码及其相关,并含有额外的预包装功能的插件。

  正如上面提到的,/app是所有的乐趣产生的地方,让我们更深入的看看这个目录的结构。

  图 1.2 显示/app文件夹的详细信息:

图1.2 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

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

  让我们进入Laravel应用工作的高级别概述。你可能已经注意到了标准的Laravel应用程序结构由一个应用程序目录app/,它含有三个 子目录:models/,views/和controllers/。这就透露了Laravel遵循model-view-controller(MVC) 架构模式,就是强制将输入到展示逻辑关系的“业务逻辑”与图形用户界面(GUI)分开。就Laravel web应用而言,业务逻辑通常由像用户,博客文章这样的数据模型组成。GUI只是浏览器中的网页而已。MVC设计模式在网页开发领域很流行。

  MVC模式的3个组件:

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

  [注] 原作者在这里详细介绍了MVC三个组成部分,我这里由于篇幅就不介绍了。

Laravel组件

  一个典型的Laravel应用程序包含上面提到的MVC组件,如下图:

  当与Laravel交互时,浏览器发送一个请求,web服务器接收到请求并且传给Laravel路由引擎。Laravel路由接收到请求,然后重定向给基于路由的URL模式的合适的控制器类方法。

  然后控制器类接管。在某种情况下,控制器会立即呈现出一个视图,它是一个被转换成HTML并送回浏览器的模版。更常见的动态网站,控制器与模型 交互,这是一个PHP对象,它表示应用程序(如用户、博客文章)中的一个元素,并负责与数据库进行通信的。调用模型后,控制器则呈现最终视图( HTML,CSS和图像),并返回完整的网页到用户的浏览器。

  Laravel促进了这样的概念——模型、视图和控制器,应通过存储这些元素在不同的目录中的单独的代码文件中来保持相当的独立性。这就是Laravel目录结构发挥了作用。

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

数据模型

  数据模型是任何应用程序的基础,它描述了应用程序的业务逻辑。任何一块的数据都是用数据库表来表示的。Laravel提供了一些技术来简化对数据库的访问。

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

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

Laravel 应用程序的体系结构(转)

时间: 2024-07-29 20:59:35

Laravel 应用程序的体系结构(转)的相关文章

Ubuntu16.04上使用Nginx部署Laravel应用程序

Laravel 是一个非常流行的PHP框架,以编码风格优雅著称,每行代码都非常简洁,富有表达力,并且拥有强大的组件开发生态,号称为web艺术家创造的PHP框架.我最近的个人项目尝试了下Laravel框架,部署的的时候遇到了一些坑,这里记录下. 我用的服务器是DigitalOcean的Ubuntu 16.04 LTS,其他公司的服务器应该也大同小异,有一些公司甚至简化了安装流程,几乎不用改动配置文件就可以让自己的程序跑起来(比如阿里云 安装依赖 更新apt-get 1 sudo apt-get u

程序开发体系结构

1.C/S体系结构 --客户端/服务器结构     C/S是Client/Server的缩写,即客户端.服务器结构.在这种结构中,服务器通常采用高性能的PC机或者工作站,并采用大型数据库系统,客户端则需要安装专用的客户端组件.这种结构可以充分利用两端硬件环境的优势,将任务合理分配到客户端和服务器,从而降低了系统通信的开销. 2.B/S体系结构--浏览器/服务器结构 B/S是Brower/Server的缩写,即浏览器/服务器结构.在这种结构中,客户端不需要开发任何用户界面,而统一采用浏览器,通过W

php Laravel安装教程学习笔记

在一切环境就绪了,当然就要开始了解框架了. 站在巨人的肩膀上,学东西会事半功倍.我在网上找到一篇好文章,正好可以让我轻松了解Laravel应用程序的体系结构.因此借来直接用了. 该章节内容翻译自<Architecture of Laravel Applications>,一切版权为原作者,由于原作者写这篇文章时Laravel版本还没有到4.1,一些地方有稍微差别,我会稍作修改. 原作者:Stable Host, LLC(不知道找对了没有) 翻译作者:Bowen Huang 正文: Larave

使用 visualstudio code 编辑器调试执行在 homestead 环境中的 laravel 程序

由于之前做 .net 开发比较熟悉 visualstudio,所以自 visualstudio code 发布后就一直在不同场合使用 vscode ,比如前端.node等等.最近在做 laravel 项目,需要通过 vscode 来调试 homestead 中的 laravel 代码.做了一些有关 laravel 调试环境安装部署的尝试,本文是一个简要记录. 基本环境 阅读本文之前,你应该安装好了基本的开发环境,比如 visualstudio code. visualbox.vagrant.ho

Laravel框架的体系结构

Laravel被称为“全栈”式框架,因为它能够处理从网络服务到数据库管理.HTML生成的一切事情,垂直集成的web开发环境给开发者提供了更好的体验. 开发人员可以通过命令行工具,生成和管理Laravel项目环境.Laravel附带了一个名为Artisan的优秀的命令行工具,它提供了一些开发过程中有用的命令用,可以用来生成框架代码和数据库管理.它是基于强大的Symfony Console 组件开发的. Laravel的目标是给开发者创造一个愉快的开发过程,并且不牺牲应用的功能性.快乐的开发者才能创

对 Web 应用程序进行性能调优

动态的 Web 应用程序能够存储大量信息,让用户能够通过熟悉的界面立即访问这些信息.但是,随着应用程序越来越受欢迎,可能会发现对请求的响应速度没有以前那么快了.开发人员应该了解 Web 应用程序处理 Web 请求的方式,知道在 Web 应用程序开发中可以做什么,不能做什么,这有助于减少日后的麻烦. 静态的 Web 请求(比如图 1 所示的请求)很容易理解.客户机连接服务器(通常通过 TCP 端口 80),使用 HTTP 协议发出一个简单的请求. 图 1. 客户机通过 HTTP 请求静态的文件 服

《learning laravel》翻译第三章-----搭建我们第一个网站

重要: 这是一个稳定的版本. 让我们知道你的喜好. 我们将会修改bug和错误,并且定期更新所有章节. 第二章: 搭建我们第一个网站 既然我们知道如何安装Laravel了, 那现在就开始通过我们自己的方式来搭建我们第一个基于Laravel的网站吧. 在本章中,通过搭建Laravel应用程序你将会很方便得学习Laravel的结构,路由,控制器,模板,Artisan命令,Elixir API和很多基础特性. 剖析Laravel结构 假设你将Laravel安装在 ~/Code/Laravel目录.跳转到

laravel框架之服务提供者(提及契约Contracts)

首先理解两个概念 1.契约:一组定义了框架核心服务的接口 2.服务提供者:所有 Laravel 应用程序启动的中心所在. 包括你自己的应用程序,以及所有的 Laravel 核心服务,都是通过服务提供者启动的. 启动指的是 注册 事物,包括注册服务容器绑定.事件侦听器.中间件,甚至路由. 我们还是继续超人的故事,现在拿xpower来具体分析 xpower的诞生---(契约和服务提供者) 1.定义一个契约(接口) app\Contracts文件夹下 <?php namespace App\Contr

学习嵌入式开发板的Android平台体系结构和源码结构

本文转自迅为论坛资料:http://www.topeetboard.com 推荐学习嵌入式开发板平台:iTOP-4412开发板 下面这张图出自Google官方,展示了Android系统的主要组成部分. 可以看出,Android系统架构由5部 分组成,分别是:Linux Kernel.Android Runtime.Libraries.Application Framework.Applications.其实这部分SDK文档已经帮我们做得很好了,要做的就是拿来主义,然后再加上自己理解.接下来拿起手