前言
前段时间花了好久才弄好LNMP环境,前前后后又倒腾了composer、redis等环境,这才对自己的菜有了深刻的理解。以后多多编译安装一些环境和软件吧,不然遇到错误了,哭都哭不出来!
Laravel——简洁、优美的PHP框架
在学习了部分Django框架后,我决定全身心的转战PHP框架。(种种原因) 最开始了解到的是国人的PHP框架——ThinkPHP,这也是一个很适合新手入门的框架,可我没选择它的原因是:不够优美,不够简洁!有可能是Django看多了,对这种不方便开发和使用的框架有点反感。
慢慢我了解到Laravel,她的优美和简洁完全颠覆了我对优美的理解。 自带的artisan项目管理脚本让你只需一行命令便可生成一个控制器或者模型模板,一行命令让你网站瞬间进入维护状态。这点有点类似Django的python manage.py。
全部代码,包括注释,都仿佛是一件工艺品。 “我甚至有点怀疑Laraver的开发者是处女座!”
于是,我对Laravel动了心!
Laravel——“身体结构”
学习一个新的框架,当然要先从 “身体” 开始了解!
App目录
app 目录包含了应用的核心代码,注意不是框架的核心代码,框架的核心代码在 /vendor/laravel/framework 里面,此外你为应用编写的代码绝大多数也会放到这里,当然,如果你基于 Composer 做了 PHP 组件化开发的话,这里面存放的恐怕也只有一些入口性的代码了;
Bootstrap目录
bootstrap 目录包含了少许文件,用于框架的启动和自动载入配置,还有一个 cache 文件夹,里面包含了框架为提升性能所生成的文件,如路由和服务缓存文件;
Config目录
config 目录包含了应用所有的配置文件,建议通读一遍这些配置文件以便熟悉 Laravel 所有默认配置项;
Database目录
database 目录包含了数据库迁移文件及填充文件,如果有使用 SQLite 的话,你还可以将其作为 SQLite 数据库存放目录;
Public目录
public 目录包含了应用入口文件 index.php 和前端资源文件(图片、JavaScript、CSS等),该目录也是 Apache 或 Nginx 等 Web 服务器所指向的应用根目录,这样做的好处是隔离了应用核心文件直接暴露于 Web 根目录之下,如果权限系统没做好或服务器配置有漏洞的话,很可能导致应用敏感文件被黑客窃取,进而对网站安全造成威胁;
Resources目录
resources 目录包含了应用视图文件和未编译的原生前端资源文件(LESS、SASS、JavaScript),以及本地化语言文件;
Routes目录
routes 目录包含了应用定义的所有路由。Laravel 默认提供了四个路由文件用于给不同的入口使用:web.php、api.php、 console.php 和 channels.php。
web.php文件
web.php 文件包含的路由都位于 RouteServiceProvider 所定义的 web 中间件组约束之内,因而支持 Session、CSRF 保护以及 Cookie 加密功能,如果应用无需提供无状态的、RESTful 风格的 API,那么路由基本上都要定义在 web.php 文件中。
api.php文件
api.php 文件包含的路由位于 api 中间件组约束之内,支持频率限制功能,这些路由是无状态的,所以请求通过这些路由进入应用需要通过 token 进行认证并且不能访问 Session 状态。
console.php文件
console.php 文件用于定义所有基于闭包的控制台命令,每个闭包都被绑定到一个控制台命令并且允许与命令行 IO 方法进行交互,尽管这个文件并不定义 HTTP 路由,但是它定义了基于控制台的应用入口(路由)。
channels.php文件
channels.php 文件用于注册应用支持的所有事件广播频道。
Storage目录
storage 目录包含了编译后的 Blade 模板、基于文件的 Session、文件缓存,以及其它由框架生成的文件,该目录被细分为成 app、framework 和 logs 子目录,app 目录用于存放应用生成的文件,framework 目录用于存放框架生成的文件和缓存,最后,logs 目录存放的是应用的日志文件。
storage/app/public 目录用于存储用户生成的文件,比如可以被公开访问的用户头像,要达到被 Web 用户访问的目的,你还需要在 public (应用根目录下的 public 目录)目录下生成一个软连接 storage 指向这个目录。你可以通过 php artisan storage:link 命令生成这个软链接。
Tests目录
tests 目录包含自动化测试文件,其中默认已经提供了一个开箱即用的PHPUnit 示例;每一个测试类都要以 Test 开头,你可以通过 phpunit 或 php vendor/bin/phpunit 命令来运行测试。
Vendor目录
vendor 目录包含了应用所有通过 Composer 加载的依赖。
.env文件
.env文件用于存储网站所有的配置信息,比如数据库配置信息、Redis配置信息等。
artisan文件
artisan是Lavarel开发的利器,几行命令轻松搞定网站上线、下线、维护、测试,数据库测试、代码测试等大部分便于开发的工作。以后我们在开发过程中会经常和他打交道!
Laravel的MVC
和大多数的框架一样,Laravel也是基于MVC模式进行开发的。
MVC简介
MVC是全名是Model View Controller,是模型-视图-控制器的缩写,一种软件设计典范。 首先,控制器调用模型,模型返回数据给控制器,控制器得到数据后,再将数据渲染到视图并返回给用户。
或者我们可以模拟餐厅点餐的方式更好的理解MVC。 首先,客户点餐,服务员记录客户需求后告诉厨师,厨师做好后将菜给服务员,再由服务员将菜给客户。
这样的好处是, 1. 各部门分工明确,各司其职。(服务员专门记录客户需求,厨师专门做菜) 2. 代码复用性增强。(比如有两个客人同时需要一个菜,服务员统计后,可以让厨师一起做。)
当然,也有缺点: 不适合小型,中等规模软件。比如,一家小餐厅,一天也就10来个人点菜,只需要直接告诉老板需要吃什么,老板再去厨房做菜,然后亲自端过来。这里老板一人任三职,节约了成本和沟通成本。只有当餐厅大了,才需要雇服务员。
Laravel中的MVC
M -> Model -> app
V -> Viewer -> appHttpControllers
C -> Controller -> resourcesviews
Laravel中还有一个路由,所有请求都通过路由,再由路由决定将该请求转发至控制器还是直接打回。 其实路由就相当于大餐厅里面的门童,门童看到客人后, 若是衣衫不整,就拦下来并告诉他”我们这里是高级酒店,请着正装进入!“; 若是来人问商场厕所在哪里,就告诉他”直走左拐“; 若来了5个正常的来咱家酒店吃饭的顾客,就引领这几个顾客去5人桌坐下点餐;
这里门童(路由)只需要将不符合规定的客户或者不是来吃饭的客户拦下,然后将符合规定的来吃饭的顾客带到正确的座位点餐就行。
同理,路由只需将”击中“路由规则的正常请求转发到对应的控制器,未”击中“路由规则的请求拦截即可。其他的事情交给服务员(C)和厨师(M)做就行了。
若是这一段落觉得博主讲的含糊不清的,可以在下面留言您的意见,我结合您的意见再做更改!