Laravel 5.0 学习笔记(2) 大致介绍一下Laravel 5的目录结构,框架的设计思想(然而我自己其实也没有太明白)以及开发过程中常用的一些小方法之类的。
Laravel从版本4升级到版本5的过程中,很重要的一项更新就是重构了文件夹目录结构。Laravel 4的目录结构中,一些文件夹的命名以及文件的分布较为随意,比如“app/start”,而在Laravel 5中更名为了“app/Providers”,即服务提供者,而控制器(Controllers),中间件(Middleware),和请求(Requests)现在也放到了“app/Http”目录下。总体来看,Laravel 5的文件夹目录结构更为职责化与专业化,至少从开发人员的角度来说,provider比start更能让我知道文件夹下面的文件是用来做什么的。
Laravel 5的目录结构及其作用在官方文档中已经有很详细的描述了(戳我戳我),但其中一些并不常用,至少在入门阶段其实并不需要深入了解。以小站的代码现状为例,常用的文件夹在下图中用红框标识了出来,可以看到在差不多有一半左右的文件夹被忽略的情况下也可以很好的进行开发。但这并不意味着其他文件及代码的冗余,这只是说明了Laravel的一大特征:由浅入深,每个阶段都可以有每个阶段的开发方式,既为高级开发者提供了架构核心的接口以便于二次开发和深度定制,也为小白提供了开箱即用的自动化开发流程。
Laravel属于MVC框架,即模型-视图-控制器 ,在上图中也可以很容易地找到Models、Views和Controllers三个文件夹。关于MVC模式,如果曾经接触过ASP.NET MVC或者Java Spring的同学应该很容易理解,其设计思想就是分化Web开发中的职责,进一步可实现代码解耦与组件复用。Laravel的入口文件index.php位于public目录下,框架启动时会通过自动加载完成相应的文件引入与完成初始化工作。
粗略的,我们可以认为app目录是服务端代码,而public是客户端脚本。在app目录中,请求的接收与响应的相关代码都放在了Http文件夹下,这也正是控制器(Controller)的职责所在,只不过Laravel把请求响应与前置后置操作又单独拿了出来,这就是Requests目录与Middleware目录。Requests目录下的文件主要是在Http请求的层面上对请求进行验证与拦截,非法请求将不会进入到Controller甚至是预处理中。Middleware译为中间件,作用是进行通用性的前置后置操作,方法的执行期间在Request与Controller之间,因此一些基本的逻辑校验与请求返回前的数据封装可以再这里执行,最好的例子就是Laravel自带的登录验证。在对应Controller类的构造函数中添加中间件调用:
/** * 构造函数 * @author blackwhite */ public function __construct() { // 登录验证 $this->middleware('auth'); }
则会在该Controller下所有方法执行前先进行身份验证:
public function handle($request, Closure $next) { if ($this->auth->guest()) { if ($request->ajax()) { return response('Unauthorized.', 401); } else { return redirect()->guest('auth/login'); } } return $next($request); }
方法与文件的对应关系在Kernel.php中定义。当然,$this->middleware方法也可以只对该Controller下的某些方法或只排除某些方法执行,通过添加only或except参数。
Models文件夹用于存放模型,不过只有当你使用了Laravel的Eloquent ORM作为数据库操作媒介时,Model的作用才能最大体现,特别是面向对象方面。Laravel提供了几种数据库操作方案,纯sql语句查询,query builder查询,Eloquent ORM以及Schema,反正挑自己适合的用就好。
Services文件夹就是我们主要处理业务逻辑的地方,经由Controller转发的请求调用这里的服务。如果想要层次更清晰一些或者可维护性更高一些,可以再抽象出Repertory层来专门负责处理数据操作,或者将部分一般化的操作流程定义为事件(Event)或命令(Command),Laravel也都为此创建了指定的文件夹,只需要按照文档规范书写即可。
public文件夹下一般放置的就是前端的脚本、样式文件以及一些插件,resources/views文件夹下则是我们的模板文件。
基本上来说常用的文件夹就是以上提到的这些,除此之外没有介绍的大多也是开发过程中不需要关注的,比如storage文件夹下存放的是各种缓存信息,包括编译后的模板文件;config文件夹下是框架的配置信息;tests文件夹用于自动化测试。
这里插一个关于Laravel开发中的小技巧,即配合composer使用的artisan命令行。在安装Laravel的时候预先是要安装好composer的,所以现在我们在Laravel项目的根目录下右键,会发现菜单中有很多composer命令选项,我们选择“Use Composer here”(或者也可以通过cd命令切换路径到项目的根目录下)。在打开的命令行中输入“php artisan make:controller TestController”,然后回车,我们会发现在App/Http/Controllers目录下自动生成了一个TestController.php文件,并且里面的代码模板都为我们写好了。artisan是Laravel的辅助开发工具,可以通过命令行的形式创建文件、清空缓存、执行任务等等。更多的artisan命令可戳这里查看-->laravel 5.0 artisan 命令列表。