本文目录导读:

- 辅助函数(Helpers)
- 自定义类(服务、库、工具类)
- 视图组件(View Composers & Components)
- Traits(代码复用)
- 中间件(Middleware)
- 配置与配置文件
- 全局变量/共享数据(Service Provider)
- Eloquent 模型的全局作用域(Global Scopes)
- 快速参考表
在 Laravel 中,共享代码的放置位置取决于代码的类型和用途,以下是几种常见的场景及推荐放置位置:
辅助函数(Helpers)
自定义的全局辅助函数,如 format_date()、generate_slug() 等。
推荐位置:
app/Helpers/目录下创建 PHP 文件- 通过
composer.json的autoload.files自动加载
操作步骤:
// 1. 创建 app/Helpers/functions.php
<?php
function format_date($date) {
return $date->format('Y-m-d');
}
// 2. 修改 composer.json
"autoload": {
"files": [
"app/Helpers/functions.php"
]
}
// 3. 运行 composer dump-autoload
自定义类(服务、库、工具类)
需要被多个控制器或服务调用的业务逻辑。
推荐位置:
app/Services/- 业务服务类app/Libraries/- 工具库类app/Repositories/- 仓储模式类app/Utils/- 通用工具类
命名空间示例:
// app/Services/PaymentService.php
namespace App\Services;
class PaymentService {
public function process($order) {
// ...
}
}
在控制器中通过依赖注入或 app() 辅助函数调用。
视图组件(View Composers & Components)
在多个视图间共享的数据(如菜单、分类、用户信息)。
推荐位置:
app/View/Composers/- 视图合成器app/View/Components/- Blade 组件类
示例(视图合成器):
// app/View/Composers/MenuComposer.php
namespace App\View\Composers;
class MenuComposer {
public function compose(View $view) {
$view->with('menu', Menu::all());
}
}
// AppServiceProvider 中注册
View::composer('*', MenuComposer::class);
Traits(代码复用)
多个模型或控制器共用的逻辑。
推荐位置:
app/Traits/目录
示例:
// app/Traits/HasApiTokens.php
namespace App\Traits;
trait HasApiTokens {
public function createToken() {
// ...
}
}
// 在模型中使用
class User extends Authenticatable {
use HasApiTokens;
}
中间件(Middleware)
请求前/后需要执行共享逻辑(如权限验证、日志记录)。
推荐位置:
app/Http/Middleware/
注册:
// 在 app/Http/Kernel.php 中
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\Admin::class,
];
配置与配置文件
全站共享的配置项(如 API 密钥、业务参数)。
推荐位置:
config/目录- 使用
config('yourfile.key')访问
自定义配置文件示例:
// config/business.php
return [
'max_items_per_page' => 20,
'default_currency' => 'USD',
];
全局变量/共享数据(Service Provider)
需要在所有视图中使用的变量。
推荐位置:
app/Providers/AppServiceProvider.php的boot()方法
示例:
public function boot() {
view()->share('siteName', 'My Laravel App');
view()->share('currentYear', date('Y'));
}
Eloquent 模型的全局作用域(Global Scopes)
所有模型查询默认添加的条件(如 is_active = 1)。
推荐位置:
app/Scopes/目录
示例:
// app/Scopes/ActiveScope.php
namespace App\Scopes;
class ActiveScope implements Scope {
public function apply(Builder $builder, Model $model) {
$builder->where('is_active', 1);
}
}
快速参考表
| 代码类型 | 推荐目录 | 关键点 |
|---|---|---|
| 辅助函数 | app/Helpers/ |
需要在 composer.json 注册 |
| 服务类 | app/Services/ |
依赖注入 |
| Traits | app/Traits/ |
被模型/控制器 use |
| 视图组件 | app/View/Composers/ |
在 ServiceProvider 注册 |
| 中间件 | app/Http/Middleware/ |
在 Kernel 注册 |
| 配置项 | config/ |
config() 函数访问 |
| 全局变量 | AppServiceProvider |
view()->share() |
| 全局作用域 | app/Scopes/ |
模型 boot() 方法注册 |
核心原则:
- 逻辑复用 → 服务类 / Traits
- 视图共享 → 视图组件 / ServiceProvider
- 配置共享 → config 目录
- 请求处理 → 中间件
选择位置时考虑职责单一和可测试性,避免把太多逻辑堆在 AppServiceProvider。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播