Laravel 目录结构

目录结构

根目录 root Directory

[!App 目录](#App 目录)

简介

默认的Laravel应用程序结构旨在为大型和小型应用程序提供一个很好的起点。 但是我们可以随意组织自己的应用程序。 Laravel对任何给定类的位置几乎没有限制-只要Composer可以自动加载该类就可以。

Models 目录在哪里?

当开始使用Laravel时,许多开发人员都对缺少models目录感到困惑。 但是,缺少这样的目录是有意的。 “model”一词含糊不清,因为它对不同的人意味着不同的事物。 一些开发人员将应用程序的“model”称为其所有业务逻辑的总和,而其他开发人员将“model”称为与关系数据库进行交互的类。

因此,我们选择默认情况下将Eloquent model 放置在app目录中,并允许开发人员根据需要将它们放置在其他位置。


根目录

app

app目录包含您的应用程序的核心代码。 我们将在稍后详细探讨该目录。 但是,应用程序中几乎所有的类都将在此目录中。

bootstrap

bootstrap目录包含用于引导框架的app.php文件。 该目录还包含一个cache目录,cache 目录包含框架生成的文件,这些文件用于性能优化,例如路由和服务缓存文件。

config

顾名思义,config目录包含应用程序的所有配置文件。 仔细阅读这些配置文件并熟悉所有可用配置选项,对我们以后的开发是很有帮助的。

database

database目录包含我们的数据库迁移,model工厂和 seeds。 如果愿意,我们也可以使用此目录来保存SQLite数据库。

public

public 目录包含index.php文件,该文件是进入应用程序的所有请求的入口点。 该目录还包含静态资源,例如图片,JavaScript和CSS。

resources

resources 目录包含视图以及未编译的原始资源文件,例如LESS,SASS或JavaScript。 此目录还包含所有language文件。

routes

routes 目录包含应用程序的所有路由定义。 默认情况下,Laravel包含以下几个路由文件:

  • web.php
  • api.php
  • console.php
  • channels.php

web.php文件包含RouteServiceProvider放置在Web中间件组中的路由,该路由提供会话状态,CSRF保护和cookie加密。如果应用程序不提供无状态的RESTful API,则很可能在web.php文件中定义了所有路由。

api.php文件包含RouteServiceProvider放置在api中间件组中的路由,该路由提供了访问频率限制。这些路由多数为无状态的,因此通过这些路由进入应用程序的请求旨在通过token进行身份验证,并且无法访问会话状态。

console.php文件中定义所有基于Closure的控制台命令。每个闭包都绑定到一个命令实例,从而允许一种简单的方法与每个命令的IO方法进行交互。即使此文件未定义HTTP路由,它仍定义了到应用程序的基于控制台的入口点(路由)。

我们可以在channels.php文件中注册所有的Laravel支持的广播事件。

storage

存储目录包含编译后的Blade模板,基于文件的会话,文件缓存以及框架生成的其他文件。 该目录分为app目录,framework目录和logs目录。 app目录可用于存储我们的应用程序生成的任何文件。 framework目录用于存储框架生成的文件和缓存。 最后,logs目录包含应用程序的日志文件。

storage/app/public目录可用于存储用户生成的文件(例如,配置文件头像),这些文件应该是可公开访问的。 我们可以使用以下命令在public/storage上创建一个指向该目录的符号链接。

$ php artisan storage:link

tests

tests目录包含我们的自动化测试用例。 默认项目中提供了一个PHPUnit测试示例。 每个测试类都应以单词Test作为后缀。 我们可以使用phpunitphp vendor/bin/phpunit命令运行测试。

vendor

vendor目录包含所有的composer的依赖包


App 目录

我们的大多数应用程序都位于app目录中。 默认情况下,该目录下的文件的命名空间名称为App,并由Composer使用PSR-4 autoloading standard自动加载。

app目录包含各种其他目录,例如Console,Http和Providers。 可以将Console和Http目录视为提供应用程序核心的API。 HTTP协议和CLI都是与应用程序进行交互的机制,但实际上并不包含应用程序逻辑。 换句话说,它们是向应用程序发出命令的两种方式。 Console目录包含所有的Artisan命令,而Http目录包含控制器,中间件和 Requests。

当使用Artisan命令make生成类时,在app目录中会生成相应目录。 因此,例如,我们使用 php artisan make:job 命令生成Job类,如果app/Jobs 目录不存在,则会自动创建该目录。

app目录中的许多类可以通过 Artisan 的 make 命令生成。 要查看可用的命令,在终端中运行下面命令。

$ php artisan list make

Broadcasting

Broadcasting目录包含应用程序的所有广播channel类。 这些类是使用make:channel命令生成的。 该目录默认情况下不存在,但在用命令生成第一个channel时创建。 要了解有关channel的更多信息,请查看event broadcasting的文档。

Console

Console目录包含适用于应用程序的所有自定义Artisan命令。 这些命令可以使用make:command命令生成。 该目录还包含Console Kernel,我们可以在其中注册自定义Artisan命令并定义计划任务

Events

该目录默认情况下不存在,将由artisan命令event:generatemake:event创建。 Events目录包含事件类。 事件可用于提醒应用程序其他部分已发生指定操作,从而提供了很大的灵活性和解耦性。

Exceptions

Exceptions目录包含应用程序的异常类,也是放置应用程序引发的所有异常的最佳地方。 如果要自定义异常的记录或展现方式,则应修改此目录中的Handler类。

Http

Http目录包含控制器,中间件和表单请求。 几乎所有用于处理进入应用程序的请求的逻辑都将放置在此目录中。

Jobs

该目录默认情况下不存在,但是如果执行Artisan命令make:job,将创建该目录。 Jobs目录包含适用于应用程序的可排队作业。 作业可能排队或在当前请求生命周期内同步运行。 在当前请求期间同步运行的作业有时称为“命令”,因为它们是命令模式的实现。

Listeners

该目录默认情况下不存在,但是如果执行Artisan命令event:generatemake:listener,则会创建该目录。 Listeners目录包含处理事件的类。 事件侦听器接收事件实例并执行逻辑以响应被触发的事件。 例如,一个UserRegistered事件可能由SendWelcomeEmail监听器处理。

Mail

该目录默认情况下不存在,但是执行Artisan命令make:mail,将创建该目录。 Mail目录包含应用程序发送的电子邮件的所有类。 邮件对象使我们可以将构建电子邮件的所有逻辑封装在一个简单的类中,该类可以使用Mail::send方法发送。

Notifications

该目录默认情况下不存在,但是执行Artisan 命令 make:notification将创建该目录。 Notifications目录包含应用程序发送的所有“事务性”通知,例如有关应用程序中发生的事件的简单通知。 Laravel的通知功能可以抽象化通过各种驱动程序(例如电子邮件,Slack,SMS或存储在数据库中)发送通知。

Policies

该目录默认情况下不存在,但如果执行Artisan命令make:policy,将创建该目录。 Policies目录包含应用程序的授权策略类。 这些策略类用于确定用户是否可以对资源执行给定的操作。 有关更多信息,请查看authorization文档

Providers

Providers目录包含应用程序的所有Service Provider。 Service Provider通过在服务容器中绑定服务,注册事件或执行任何其他任务来为进入的请求准备应用程序,从而引导应用程序正确运行。

在一个新安装的Laravel应用程序中,已经默认提供多个Providers。 我们可以根据需要随意将自己的Provider添加到此目录中。

Rules

该目录默认情况下不存在,但是执行Artisan 命令make:rule,将创建该目录。 Rules目录包含适用于应用程序的定制验证规则对象。 规则用于将复杂的验证逻辑封装在一个简单的对象中。 有关更多信息,请查看validation文档

查看笔记

扫码一下
查看教程更方便