百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

[ Laravel 5.6 文档 ] 快速入门 —— 目录结构

bigegpt 2024-10-18 04:21 5 浏览

[ Laravel 5.6 文档 ] 快速入门 —— 目录结构,文章转自laravel学院。

简介

Laravel 默认的目录结构试图为不管是大型应用还是小型应用提供一个良好的起点。当然,你也可以按照自己的喜好重新组织应用的目录结构,因为 Laravel 对于指定类在何处被加载没有任何限制 —— 只要 Composer 可以自动载入它们即可。

Models 目录在哪里?

许多初学者都会困惑 Laravel 为什么没有提供 models 目录,我可以负责任的告诉大家,这是故意的。因为 models 这个词对不同人而言有不同的含义,容易造成歧义,有些开发者认为应用的模型指的是业务逻辑,另外一些人则认为模型指的是与关联数据库的交互。

正是因为这个原因,我们默认将 Eloquent 的模型直接放置到 app 目录下,开发者可以自行选择放置的位置。

这是 Laravel 框架作者的想法,不过对于国内开发者,尤其是 PHP 开发者来说,models 目录用于存放与数据库交互的模型类应该没有什么异议,而业务逻辑应该放到 services 这种目录之下。所以推荐大家在生成模型类的时候指定生成到 app/Models 目录下:

php artisan make:model Models/Test

?根目录

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.phpapi.phpconsole.phpchannels.php

web.php 文件包含的路由都位于 RouteServiceProvider 所定义的web 中间件组约束之内,因而支持 Session、CSRF 保护以及 Cookie 加密功能,如果应用无需提供无状态的、RESTful 风格的 API,那么路由基本上都要定义在 web.php 文件中。

api.php 文件包含的路由位于 api 中间件组约束之内,支持频率限制功能,这些路由是无状态的,所以请求通过这些路由进入应用需要通过 token 进行认证并且不能访问 Session 状态。

console.php 文件用于定义所有基于闭包的控制台命令,每个闭包都被绑定到一个控制台命令并且允许与命令行 IO 方法进行交互,尽管这个文件并不定义 HTTP 路由,但是它定义了基于控制台的应用入口(路由)。

channels.php 文件用于注册应用支持的所有事件广播频道。

Storage目录

storage 目录包含了编译后的 Blade 模板、基于文件的 Session、文件缓存,以及其它由框架生成的文件,该目录被细分为成 appframeworklogs 子目录,app 目录用于存放应用生成的文件,framework 目录用于存放框架生成的文件和缓存,最后,logs 目录存放的是应用的日志文件。

storage/app/public 目录用于存储用户生成的文件,比如可以被公开访问的用户头像,要达到被 Web 用户访问的目的,你还需要在 public (应用根目录下的public 目录)目录下生成一个软连接 storage 指向这个目录。你可以通过 php artisan storage:link 命令生成这个软链接。

Tests目录

tests 目录包含自动化测试文件,其中默认已经提供了一个开箱即用的PHPUnit 示例;每一个测试类都要以 Test

开头,你可以通过 phpunitphp vendor/bin/phpunit 命令来运行测试。

Vendor目录

vendor 目录包含了应用所有通过 Composer 加载的依赖。

App目录

应用的核心代码位于 app 目录下,默认情况下,该目录位于命名空间 App 下, 并且被 Composer 通过 PSR-4 自动载入标准 自动加载。

app 目录下包含多个子目录,如 ConsoleHttpProviders等。ConsoleHttp 目录提供了进入应用核心的 API,HTTP 协议和 CLI 是和应用进行交互的两种机制,但实际上并不包含应用逻辑。换句话说,它们只是两个向应用发送命令的方式。Console 目录包含了所有开发者编写的 Artisan 命令,Http 目录包含了控制器、中间件和请求等。

其他目录会在你通过 Artisan 命令 make 生成相应类的时候自动生成到 app 目录下。例如,app/Jobs 目录直到你执行 make:job 命令生成任务类时才会出现在 app 目录下。

注:app 目录中的很多类都可以通过 Artisan 命令生成,要查看所有有效的命令,可以在终端中运行 php artisan list make 命令。

Broadcasting目录

Broadcasting 目录包含了应用所需的所有广播频道类,这些类通过 make:channel 命令生成。该目录默认不存在,但是当你通过命令第一次创建频道类时会自动生成。想要了解更多关于频道的信息,可以查看事件广播文档。

Console目录

Console 目录包含应用所有自定义的 Artisan 命令,这些命令类可以使用 make:command 命令生成。该目录下还有 Console/Kernel 类,在这里可以注册自定义的 Artisan 命令以及定义调度任务。

Events目录

这个目录默认不存在,但是可以通过 event:generatemake:event 命令创建。该目录用于存放事件类。事件类用于告知应用其他部分某个事件发生情况并提供灵活的、解耦的处理机制。

Exceptions目录

Exceptions 目录包含应用的异常处理器,同时还是处理应用抛出的任何异常的好地方。如果你想要自定义异常如何记录或渲染,需要编辑该目录下的 Handler 类。

Http目录

Http 目录包含了控制器、中间件以及表单请求等,几乎所有通过 Web 进入应用的请求处理都在这里进行。

Jobs目录

该目录默认不存在,可以通过执行make:job 命令生成,Jobs 目录用于存放队列任务,应用中的任务可以被推送到队列,也可以在当前请求生命周期内同步执行。同步执行的任务有时也被看作命令,因为它们实现了命令模式。

Listeners目录

这个目录默认不存在,可以通过执行 event:generatemake:listener 命令创建。Listeners 目录包含处理事件的类(事件监听器),事件监听器接收一个事件并提供对该事件发生后的响应逻辑,例如,UserRegistered 事件可以被 SendWelcomeEmail 监听器处理。

Mail目录

这个目录默认不存在,但是可以通过执行 make:mail 命令生成,Mail 目录包含应用所有邮件相关类,邮件对象允许你在一个地方封装构建邮件所需的所有业务逻辑,然后使用 Mail::send 方法发送邮件。

Notifications目录

这个目录默认不存在,你可以通过执行 make:notification 命令连带创建,Notifications 目录包含应用发送的所有通知,比如事件发生通知。Laravel 的通知功能将通知发送和通知驱动解耦,你可以通过邮件,也可以通过Slack、短信或者数据库发送通知。

Policies目录

这个目录默认不存在,你可以通过执行 make:policy 命令生成策略类来创建, Policies 目录包含了应用所有的授权策略类,策略用于判断某个用户是否有权限去访问指定资源。更多详情,请查看授权文档。

Providers目录

Providers 目录包含应用的所有服务提供者。服务提供者在应用启动过程中绑定服务到容器、注册事件以及执行其他任务为即将到来的请求处理做好准备工作。在新安装的 Laravel 应用中,该目录已经包含了一些服务提供者,你可以按需添加自己的服务提供者到该目录。

Rules目录

该目录默认不存在,但是会伴随你执行 Artisan 命令 make:rule 自动生成。Rules 目录包含应用的自定义验证规则对象,这些规则用于在单个对象中封装复杂的验证逻辑,想要了解更多的话,请参考验证文档。

总结:目录结构的维护需要用到artisan命令,所以掌握使用Laravel 必须掌握的常用命令非常重要。

相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...