本文目录导读:

我来帮你系统性地规划PHP项目,以下是完整的项目规划和架构建议:
项目结构规划
基础目录结构
project-root/
├── app/
│ ├── Config/ # 配置文件夹
│ ├── Controllers/ # 控制器
│ ├── Models/ # 数据模型
│ ├── Views/ # 视图文件
│ ├── Middleware/ # 中间件
│ └── Services/ # 业务服务层
├── public/
│ ├── index.php # 入口文件
│ ├── assets/ # 静态资源
│ │ ├── css/
│ │ ├── js/
│ │ └── images/
│ └── uploads/ # 上传文件
├── storage/
│ ├── logs/ # 日志
│ ├── cache/ # 缓存
│ └── sessions/ # 会话
├── vendor/ # Composer依赖
├── tests/ # 测试文件
├── .env # 环境配置
├── .env.example # 环境配置示例
├── composer.json # 依赖管理
├── composer.lock # 依赖锁定
└── README.md # 项目说明
技术栈选择
基础框架
{
"require": {
"php": ">=8.1",
"laravel/framework": "^10.0",
"symfony/framework-bundle": "^6.0"
}
}
推荐框架对比
| 框架 | 适用场景 | 学习曲线 | 社区支持 |
|---|---|---|---|
| Laravel | 全栈应用 | 中等 | 优秀 |
| Symfony | 企业应用 | 较高 | 优秀 |
| ThinkPHP | 快速开发 | 较低 | 良好 |
| Yii2 | 性能要求高 | 中等 | 良好 |
核心架构设计
MVC架构示例
// Controller示例
class UserController {
private $userService;
public function __construct(UserService $userService) {
$this->userService = $userService;
}
public function index() {
$users = $this->userService->getAllUsers();
return view('users.index', ['users' => $users]);
}
}
// Model示例
class User extends Model {
protected $fillable = ['name', 'email', 'password'];
protected $hidden = ['password'];
public function posts() {
return $this->hasMany(Post::class);
}
}
// Service示例
class UserService {
private $userRepository;
public function createUser(array $data) {
// 业务逻辑
$user = User::create($data);
// 发送欢迎邮件
Mail::to($user)->send(new WelcomeMail($user));
return $user;
}
}
数据库设计
规范化设计
-- 用户表
CREATE TABLE users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 文章表
CREATE TABLE posts (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,VARCHAR(200) NOT NULL,
content TEXT,
status ENUM('draft', 'published', 'archived') DEFAULT 'draft',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- 创建索引
CREATE INDEX idx_posts_user_id ON posts(user_id);
CREATE INDEX idx_posts_status ON posts(status);
安全规划
安全实践
// CSRF保护
class CsrfMiddleware {
public function handle($request, $next) {
if ($request->isMethod('post')) {
$token = $request->input('_token');
if (!hash_equals(session('_token'), $token)) {
throw new \Exception('CSRF token mismatch');
}
}
return $next($request);
}
}
// SQL注入防护(使用预处理语句)
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);
// XSS防护
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
// 密码加密
$hashedPassword = password_hash($password, PASSWORD_BCRYPT);
API设计
RESTful API规范
// 路由定义
Route::prefix('api/v1')->group(function () {
Route::get('/users', 'UserController@index');
Route::post('/users', 'UserController@store');
Route::get('/users/{id}', 'UserController@show');
Route::put('/users/{id}', 'UserController@update');
Route::delete('/users/{id}', 'UserController@destroy');
});
// API响应格式
class ApiResponse {
public static function success($data, $message = 'Success', $code = 200) {
return response()->json([
'status' => 'success',
'message' => $message,
'data' => $data
], $code);
}
public static function error($message, $code = 400) {
return response()->json([
'status' => 'error',
'message' => $message
], $code);
}
}
测试策略
测试目录结构
tests/
├── Unit/
│ ├── Services/
│ └── Models/
├── Feature/
│ ├── Controllers/
│ └── Api/
└── Browser/
测试示例
class UserTest extends TestCase {
public function test_user_creation() {
$response = $this->post('/api/users', [
'name' => 'John Doe',
'email' => 'john@example.com',
'password' => 'secret123'
]);
$response->assertStatus(201);
$this->assertDatabaseHas('users', [
'email' => 'john@example.com'
]);
}
}
部署规划
CI/CD流程
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.1'
- name: Install Dependencies
run: composer install --no-dev
- name: Run Tests
run: php artisan test
- name: Deploy to Server
run: |
rsync -avz --exclude 'vendor' --exclude '.env' ./ user@server:/var/www/project
ssh user@server "cd /var/www/project && composer install --no-dev && php artisan migrate"
监控与日志
日志配置
// 日志级别配置
'log_levels' => [
'emergency',
'alert',
'critical',
'error',
'warning',
'notice',
'info',
'debug'
]
// 日志记录示例
Log::channel('daily')->info('User action', [
'user_id' => $userId,
'action' => 'login',
'ip' => $request->ip()
]);
性能优化
// 缓存策略
Cache::remember('users.active', 3600, function () {
return User::where('status', 'active')->get();
});
// 数据库优化
User::select('id', 'name', 'email')
->with('posts:id,title')
->where('status', 'active')
->paginate(20);
// 队列处理
Queue::push(new ProcessPodcast($podcast));
这只是基础框架,实际项目需要根据具体需求调整:
- 小项目:可简化架构,使用ThinkPHP等轻量框架
- 中大型项目:推荐Laravel/Symfony,完整MVC架构
- 微服务:考虑API架构,使用Lumen等微框架
建议从PHP 8.1+开始,启用严格类型检查,使用现代特性提升代码质量。