Laravel 12 开发指南
Laravel 12 框架开发助手,专注于控制器、模型、命令行工具、服务层的快速开发。
常用 Artisan 命令
# 生成控制器
php artisan make:controller UserController
# 生成资源控制器(RESTful)
php artisan make:controller UserController --resource
# 生成 API 控制器
php artisan make:controller API/UserController --api
# 生成模型
php artisan make:model User
# 生成模型 + 迁移文件
php artisan make:model User -m
# 生成模型 + 迁移 + 工厂 + 控制器
php artisan make:model User -mcf
# 生成命令
php artisan make:command ImportDataCommand
# 生成中间件
php artisan make:middleware CheckUserRole
# 生成服务提供者(用于注册门面)
php artisan make:provider PaymentServiceProvider
# 生成请求验证类
php artisan make:request StoreUserRequest
# 生成迁移文件
php artisan make:migration create_users_table
# 执行迁移
php artisan migrate
# 回滚迁移
php artisan migrate:rollback
# 生成 Seeder
php artisan make:seeder UserSeeder
# 执行 Seeder
php artisan db:seed
# 清除缓存
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
# 启动开发服务器
php artisan serve
快速示例
控制器
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(): JsonResponse
{
$users = User::all();
return response()->json([
'success' => true,
'data' => $users
]);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): JsonResponse
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
]);
$user = User::create($validated);
return response()->json([
'success' => true,
'data' => $user
], 201);
}
/**
* Display the specified resource.
*/
public function show(User $user): JsonResponse
{
return response()->json([
'success' => true,
'data' => $user
]);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, User $user): JsonResponse
{
$validated = $request->validate([
'name' => 'sometimes|string|max:255',
'email' => 'sometimes|email|unique:users,email,' . $user->id,
]);
$user->update($validated);
return response()->json([
'success' => true,
'data' => $user
]);
}
/**
* Remove the specified resource from storage.
*/
public function destroy(User $user): JsonResponse
{
$user->delete();
return response()->json([
'success' => true,
'message' => 'User deleted successfully'
]);
}
}
模型(Eloquent ORM)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model
{
use HasFactory, SoftDeletes;
/**
* The table associated with the model.
*/
protected $table = 'users';
/**
* The attributes that are mass assignable.
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*/
protected $casts = [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
/**
* Get the posts for the user.
*/
public function posts()
{
return $this->hasMany(Post::class);
}
/**
* Get the user's profile.
*/
public function profile()
{
return $this->hasOne(Profile::class);
}
}
命令(Artisan Command)
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\User;
class ImportDataCommand extends Command
{
/**
* The name and signature of the console command.
*/
protected $signature = 'import:data {file} {--force}';
/**
* The console command description.
*/
protected $description = 'Import data from file';
/**
* Execute the console command.
*/
public function handle(): int
{
$file = $this->argument('file');
$force = $this->option('force');
$this->info("Processing file: {$file}");
if ($force) {
$this->warn('Force mode enabled');
}
// 处理逻辑
$bar = $this->output->createProgressBar(100);
$bar->start();
for ($i = 0; $i < 100; $i++) {
// 处理数据
$bar->advance();
}
$bar->finish();
$this->newLine();
$this->info('Import completed successfully!');
return Command::SUCCESS;
}
}
中间件(Middleware)
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class CheckUserRole
{
/**
* Handle an incoming request.
*/
public function handle(Request $request, Closure $next, string $role): Response
{
if (!$request->user() || !$request->user()->hasRole($role)) {
abort(403, 'Unauthorized action.');
}
return $next($request);
}
}
注册中间件(在 app/Http/Kernel.php 或 bootstrap/app.php):
// 全局中间件
protected $middleware = [
\App\Http\Middleware\CheckUserRole::class,
];
// 路由中间件
protected $middlewareAliases = [
'role' => \App\Http\Middleware\CheckUserRole::class,
];
使用中间件:
// 在路由中使用
Route::get('/admin', function () {
// ...
})->middleware('role:admin');
// 在控制器构造函数中使用
public function __construct()
{
$this->middleware('role:admin');
}
门面(Facade)
创建服务类:
<?php
namespace App\Services;
class PaymentService
{
public function process(array $data): array
{
// 处理支付逻辑
return [
'status' => 'success',
'transaction_id' => uniqid(),
];
}
public function refund(string $transactionId): bool
{
// 退款逻辑
return true;
}
}
创建门面类:
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Payment extends Facade
{
/**
* Get the registered name of the component.
*/
protected static function getFacadeAccessor(): string
{
return 'payment';
}
}
注册服务提供者(在 app/Providers/AppServiceProvider.php):
<?php
namespace App\Providers;
use App\Services\PaymentService;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->singleton('payment', function ($app) {
return new PaymentService();
});
}
}
使用门面:
use App\Facades\Payment;
// 调用门面方法
$result = Payment::process([
'amount' => 100,
'currency' => 'USD',
]);
// 退款
Payment::refund($transactionId);
服务类
<?php
namespace App\Services;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
class UserService
{
/**
* Create a new user.
*/
public function create(array $data): User
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
/**
* Update user information.
*/
public function update(User $user, array $data): User
{
$user->update($data);
return $user->fresh();
}
/**
* Delete a user.
*/
public function delete(User $user): bool
{
return $user->delete();
}
/**
* Find user by email.
*/
public functio