# LaraClassifier - 地理分类广告CMS系统
## 项目概述
**LaraClassifier** 是一个功能强大的分类广告内容管理系统(CMS),具有完全响应式设计,支持地理位置定位功能。该系统允许用户发布、浏览和管理分类广告,适用于各种行业和市场。
- **项目类型**:Web应用 / 分类广告CMS
- **主要功能**:
- 分类广告发布与管理
- 地理位置定位与搜索
- 多语言支持
- 支付集成(PayPal、Stripe等)
- 社交登录(Facebook、LinkedIn、Twitter、Google)
- 短信API集成
- 广告推广系统
- 用户管理系统
- 管理后台
- API接口
- **技术栈**:
- 后端:PHP 8.2+, Laravel 12.x
- 前端:Bootstrap, Vue.js
- 数据库:MySQL/PostgreSQL/SQLite
- 缓存:Redis
- 队列:Laravel Queue
- 搜索引擎:内置搜索
## 模块结构
```
laraclassified/
├── app/ # 应用程序核心代码
│ ├── Console/ # Artisan命令
│ ├── Enums/ # 枚举类型
│ ├── Events/ # 事件类
│ ├── Exceptions/ # 异常处理
│ ├── Helpers/ # 辅助函数
│ │ ├── Common/ # 通用辅助函数
│ │ └── Services/ # 服务辅助函数
│ ├── Http/ # HTTP层
│ │ ├── Controllers/ # 控制器
│ │ │ ├── Admin/ # 后台管理控制器
│ │ │ ├── Auth/ # 认证控制器
│ │ │ ├── Front/ # 前端控制器
│ │ │ └── Setup/ # 安装控制器
│ │ └── Middleware/ # 中间件
│ ├── Jobs/ # 队列任务
│ ├── Models/ # Eloquent模型
│ │ ├── Advertising.php # 广告模型
│ │ ├── Category.php # 分类模型
│ │ ├── City.php # 城市模型
│ │ ├── Country.php # 国家模型
│ │ ├── Package.php # 套餐模型
│ │ ├── Post.php # 帖子/广告模型
│ │ ├── User.php # 用户模型
│ │ └── ... # 其他模型
│ ├── Notifications/ # 通知类
│ ├── Observers/ # 模型观察者
│ ├── Providers/ # 服务提供者
│ ├── Rules/ # 验证规则
│ └── Services/ # 业务服务层
├── bootstrap/ # 启动文件
├── config/ # 配置文件
├── database/ # 数据库
│ ├── migrations/ # 迁移文件
│ ├── seeders/ # 数据填充
│ └── factories/ # 模型工厂
├── documentation/ # 项目文档
├── extras/ # 额外功能模块
│ └── addons/ # 插件目录
├── lang/ # 语言文件
├── packages/ # 自定义包
├── public/ # 公共资源
├── resources/ # 资源文件
│ ├── views/ # Blade模板
│ ├── css/ # CSS源文件
│ └── js/ # JavaScript源文件
├── routes/ # 路由定义
│ ├── web.php # Web路由
│ ├── api.php # API路由
│ └── web/ # 分组路由
├── storage/ # 存储目录
├── tests/ # 测试文件
└── vendor/ # Composer依赖
```
## 核心业务逻辑
### 1. 广告发布流程
```
用户注册/登录 → 选择分类 → 填写广告信息 → 上传图片 → 选择套餐 → 支付 → 广告发布
```
### 2. 地理位置系统
- 基于GeoIP2实现地理位置自动检测
- 支持国家、城市、区域多级定位
- 地图集成(Google Maps)
- 基于位置的搜索和筛选
### 3. 支付系统
- 支持多种支付方式:PayPal、Stripe、Razorpay等
- 套餐定价系统
- 广告推广付费
- 交易记录管理
### 4. 用户系统
- 多角色权限管理(Spatie Laravel Permission)
- 社交登录集成
- 用户资料管理
- 消息通知系统
### 5. 搜索与筛选
- 全文搜索
- 多维度筛选(分类、位置、价格等)
- 保存搜索条件
- 收藏广告
## 核心代码分析
### 路由结构 (routes/web.php)
```php
Route::namespace('Setup')->group(__DIR__ . '/web/setup.php');
Route::middleware(['installed'])
->group(function () {
$authBasePath = urlGen()->getAuthBasePath();
$adminBasePath = urlGen()->getAdminBasePath();
Route::namespace('Auth')->prefix($authBasePath)->group(__DIR__ . '/web/auth.php');
Route::namespace('Admin')->prefix($adminBasePath)->group(__DIR__ . '/web/admin.php');
Route::namespace('Front')->group(__DIR__ . '/web/front.php');
});
```
### 主要模型关系
- **Post**(广告)→ belongsTo → **Category**(分类)
- **Post** → belongsTo → **User**(用户)
- **Post** → belongsTo → **City**(城市)
- **City** → belongsTo → **Country**(国家)
- **User** → hasMany → **Post**(用户发布的广告)
- **Package** → hasMany → **Post**(套餐包含的广告)
### 支付处理示例
```php
// PaymentController.php
public function payment(Request $request)
{
$package = Package::find($request->package_id);
$paymentMethod = PaymentMethod::find($request->payment_method_id);
// 根据支付方式调用不同网关
switch($paymentMethod->name) {
case 'paypal':
return $this->payWithPayPal($package);
case 'stripe':
return $this->payWithStripe($package);
// ...
}
}
```
### 地理定位服务
```php
// 使用GeoIP2获取用户位置
$geoIp = new GeoIp2();
$location = $geoIp->getLocation($ip);
// 自动设置用户城市
if ($location) {
$city = City::where('code', $location->city)->first();
session(['user_city' => $city]);
}
```
## 技术特点
1. **模块化设计**:支持插件扩展,extras/addons目录可添加新功能
2. **多语言支持**:基于Laravel的本地化系统,支持RTL语言
3. **响应式设计**:Bootstrap框架,适配移动端
4. **API支持**:内置API路由,支持移动端应用
5. **缓存优化**:支持Redis缓存,提升性能
6. **队列系统**:后台任务异步处理
7. **安全机制**:SQL注入防护、XSS防护、CSRF保护
8. **SEO优化**:友好的URL结构、Meta标签管理、站点地图
## 数据库架构
### 主要数据表
- `posts` - 广告帖子
- `categories` - 分类
- `cities` - 城市
- `countries` - 国家
- `packages` - 付费套餐
- `payments` - 支付记录
- `users` - 用户
- `roles` - 角色
- `permissions` - 权限
- `messages` - 站内消息
- `saved_posts` - 收藏的广告
- `saved_searches` - 保存的搜索
... (content truncated)