目录结构 #
一、项目根目录 #
1.1 目录概览 #
text
laravel-project/
├── app/ # 应用核心代码
├── bootstrap/ # 框架引导文件
├── config/ # 配置文件
├── database/ # 数据库相关
├── public/ # 公共入口
├── resources/ # 资源文件
├── routes/ # 路由定义
├── storage/ # 存储目录
├── tests/ # 测试文件
├── vendor/ # Composer依赖
├── .env # 环境配置
├── .env.example # 环境配置示例
├── artisan # 命令行工具
├── composer.json # Composer配置
├── composer.lock # Composer锁定
├── package.json # NPM配置
└── vite.config.js # Vite配置
1.2 根目录文件说明 #
| 文件/目录 | 说明 |
|---|---|
.env |
环境变量配置 |
.env.example |
环境配置模板 |
artisan |
Laravel命令行工具 |
composer.json |
PHP依赖配置 |
composer.lock |
依赖版本锁定 |
package.json |
前端依赖配置 |
vite.config.js |
前端构建配置 |
二、app目录 #
2.1 app目录结构 #
text
app/
├── Console/ # 命令行命令
│ └── Commands/ # 自定义命令
├── Exceptions/ # 异常处理
├── Http/ # HTTP层
│ ├── Controllers/ # 控制器
│ ├── Middleware/ # 中间件
│ └── Requests/ # 表单请求
├── Models/ # Eloquent模型
├── Providers/ # 服务提供者
└── Services/ # 业务服务类
2.2 Console目录 #
存放Artisan命令:
php
// app/Console/Commands/SendEmails.php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class SendEmails extends Command
{
protected $signature = 'emails:send';
protected $description = '发送邮件通知';
public function handle()
{
// 命令逻辑
$this->info('邮件发送成功!');
}
}
2.3 Http目录 #
HTTP层核心目录:
text
Http/
├── Controllers/ # 控制器
│ ├── Controller.php # 基础控制器
│ └── User/ # 模块控制器
├── Middleware/ # 中间件
│ ├── Authenticate.php
│ └── VerifyCsrfToken.php
└── Requests/ # 表单请求验证
└── StoreUserRequest.php
2.4 Models目录 #
Eloquent模型存放位置:
php
// app/Models/User.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $fillable = ['name', 'email', 'password'];
protected $hidden = ['password', 'remember_token'];
}
2.5 Providers目录 #
服务提供者:
php
// app/Providers/AppServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function register()
{
// 注册服务
}
public function boot()
{
// 启动服务
}
}
三、bootstrap目录 #
3.1 目录结构 #
text
bootstrap/
├── app.php # 应用引导文件
└── cache/ # 启动缓存
├── config.php # 配置缓存
├── routes-v7.php # 路由缓存
└── services.php # 服务缓存
3.2 app.php文件 #
php
// bootstrap/app.php
// Laravel 11.x 新的结构
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
)
->withMiddleware(function (Middleware $middleware) {
// 中间件配置
})
->withExceptions(function (Exceptions $exceptions) {
// 异常处理配置
})
->create();
四、config目录 #
4.1 配置文件列表 #
text
config/
├── app.php # 应用配置
├── auth.php # 认证配置
├── broadcasting.php # 广播配置
├── cache.php # 缓存配置
├── cors.php # 跨域配置
├── database.php # 数据库配置
├── filesystems.php # 文件系统配置
├── hashing.php # 哈希配置
├── logging.php # 日志配置
├── mail.php # 邮件配置
├── queue.php # 队列配置
├── sanctum.php # API认证配置
├── services.php # 第三方服务配置
├── session.php # 会话配置
└── view.php # 视图配置
4.2 访问配置值 #
php
// 使用config函数访问配置
$value = config('app.name');
// 设置配置值(运行时)
config(['app.name' => 'My App']);
// 获取环境变量
$env = env('APP_ENV', 'production');
4.3 常用配置示例 #
php
// config/app.php 关键配置
return [
'name' => env('APP_NAME', 'Laravel'),
'env' => env('APP_ENV', 'production'),
'debug' => (bool) env('APP_DEBUG', false),
'url' => env('APP_URL', 'http://localhost'),
'timezone' => 'Asia/Shanghai',
'locale' => 'zh_CN',
'fallback_locale' => 'en',
];
五、database目录 #
5.1 目录结构 #
text
database/
├── factories/ # 模型工厂
│ └── UserFactory.php
├── migrations/ # 数据库迁移
│ ├── 2024_01_01_000000_create_users_table.php
│ └── 2024_01_01_100000_create_password_reset_tokens_table.php
└── seeders/ # 数据填充
└── DatabaseSeeder.php
5.2 migrations目录 #
数据库迁移文件:
php
// database/migrations/create_users_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
};
5.3 seeders目录 #
数据填充:
php
// database/seeders/DatabaseSeeder.php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call([
UserSeeder::class,
PostSeeder::class,
]);
}
}
六、public目录 #
6.1 目录结构 #
text
public/
├── index.php # 应用入口文件
├── .htaccess # Apache配置
├── favicon.ico # 网站图标
└── build/ # 前端构建产物
6.2 index.php入口文件 #
php
// public/index.php
// 所有请求都通过此文件进入
<?php
define('LARAVEL_START', microtime(true));
require __DIR__.'/../vendor/autoload.php';
(require_once __DIR__.'/../bootstrap/app.php')
->handleRequest(Illuminate\Http\Request::capture());
6.3 安全说明 #
text
重要提示:
- public目录是唯一对外公开的目录
- 其他目录不应被Web服务器直接访问
- 敏感文件应放在storage或resources目录
七、resources目录 #
7.1 目录结构 #
text
resources/
├── css/ # CSS源文件
├── js/ # JavaScript源文件
│ ├── app.js
│ └── bootstrap.js
├── views/ # Blade视图模板
│ ├── layouts/ # 布局模板
│ ├── components/ # 组件模板
│ └── welcome.blade.php
└── lang/ # 语言文件
└── zh_CN/ # 中文语言包
7.2 views目录 #
视图文件组织:
text
views/
├── layouts/ # 布局
│ └── app.blade.php
├── partials/ # 局部视图
│ ├── header.blade.php
│ └── footer.blade.php
├── components/ # 组件
│ └── alert.blade.php
├── users/ # 用户模块视图
│ ├── index.blade.php
│ ├── create.blade.php
│ └── edit.blade.php
└── welcome.blade.php # 欢迎页
7.3 lang目录 #
多语言支持:
php
// resources/lang/zh_CN/messages.php
return [
'welcome' => '欢迎',
'goodbye' => '再见',
];
// 使用
echo __('messages.welcome');
// 或
@lang('messages.welcome')
八、routes目录 #
8.1 目录结构 #
text
routes/
├── web.php # Web路由
├── api.php # API路由
├── console.php # 命令行路由
└── channels.php # 广播频道
8.2 路由文件说明 #
| 文件 | 用途 | 中间件 |
|---|---|---|
| web.php | Web界面路由 | web, session, csrf |
| api.php | API路由 | api, throttle |
| console.php | Artisan命令 | - |
| channels.php | WebSocket频道 | - |
8.3 路由示例 #
php
// routes/web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
Route::get('/', function () {
return view('welcome');
});
Route::resource('users', UserController::class);
九、storage目录 #
9.1 目录结构 #
text
storage/
├── app/ # 应用文件
│ ├── public/ # 公开文件
│ └── private/ # 私有文件
├── framework/ # 框架文件
│ ├── cache/ # 缓存
│ ├── sessions/ # 会话
│ └── views/ # 编译视图
└── logs/ # 日志文件
└── laravel.log
9.2 storage/app #
应用存储:
php
// 存储文件
Storage::put('file.txt', '内容');
// 获取文件
$content = Storage::get('file.txt');
// 公开文件链接
php artisan storage:link
// 创建 public/storage -> storage/app/public 的符号链接
9.3 storage/logs #
日志文件:
php
// 写入日志
Log::info('用户登录', ['user_id' => 1]);
Log::error('系统错误', ['error' => $e->getMessage()]);
// 日志级别
Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);
十、tests目录 #
10.1 目录结构 #
text
tests/
├── Feature/ # 功能测试
│ └── ExampleTest.php
├── Unit/ # 单元测试
│ └── ExampleTest.php
└── TestCase.php # 测试基类
10.2 测试示例 #
php
// tests/Feature/UserTest.php
namespace Tests\Feature;
use Tests\TestCase;
class UserTest extends TestCase
{
public function test_user_can_login()
{
$response = $this->post('/login', [
'email' => 'test@example.com',
'password' => 'password',
]);
$response->assertStatus(200);
}
}
十一、vendor目录 #
11.1 说明 #
text
vendor/
├── laravel/ # Laravel框架
├── symfony/ # Symfony组件
├── psr/ # PSR标准实现
├── composer/ # Composer
└── ... # 其他依赖包
注意:
- vendor目录由Composer管理
- 不应手动修改vendor中的文件
- 不应将vendor提交到版本控制
十二、最佳实践 #
12.1 目录组织建议 #
text
推荐的模块化结构:
app/
├── Http/Controllers/
│ └── Admin/ # 后台模块
│ └── UserController.php
├── Models/
│ └── User.php
├── Services/ # 业务逻辑
│ └── UserService.php
├── Repositories/ # 数据仓库
│ └── UserRepository.php
└── Helpers/ # 辅助函数
└── helpers.php
12.2 命名规范 #
| 类型 | 命名规范 | 示例 |
|---|---|---|
| 控制器 | PascalCase + Controller | UserController |
| 模型 | PascalCase 单数 | User |
| 迁移 | snake_case | create_users_table |
| 视图 | snake_case | user_profile |
| 配置 | snake_case | app.php |
十三、总结 #
13.1 核心目录 #
| 目录 | 核心职责 |
|---|---|
| app | 业务代码 |
| config | 配置文件 |
| database | 数据库相关 |
| resources | 视图和前端资源 |
| routes | 路由定义 |
| storage | 文件存储和日志 |
13.2 下一步 #
了解了目录结构后,让我们创建 第一个应用,实践Laravel开发!
最后更新:2026-03-28