sample laravel set up easy
Laravel 简易项目搭建指南 (Sample Laravel Set Up Easy)
PART 1: Setup
Run the following commands to initialize the project, set up the database, and install the necessary UI and PDF packages.
执行以下命令以初始化项目、配置数据库并安装必要的 UI 和 PDF 扩展包。
composer create-project laravel/laravel fruit-system
cd fruit-system
# Create database in phpMyAdmin: fruit_db
# 在 phpMyAdmin 中创建数据库: fruit_db
# Edit .env:
# 编辑 .env 文件:
DB_DATABASE=fruit_db
DB_USERNAME=root
DB_PASSWORD=
# Install Breeze:
# 安装 Breeze:
composer require laravel/breeze --dev
php artisan breeze:install blade
php artisan migrate
npm install
npm run build
# Install Bootstrap UI and PDF only:
# 仅安装 Bootstrap UI 和 PDF 支持:
npm uninstall tailwindcss postcss autoprefixer
composer require aldhix/breeze-bootstrap-ui
php artisan breeze-bootstrap-ui:install --force
composer require barryvdh/laravel-dompdf
npm install
npm run build
# Create files:
# 创建文件:
php artisan make:model Fruit -mcr
php artisan make:controller ReportController
PART 2: Migration
Define the database schema for the fruits table.
定义 fruits 数据表的数据库结构。
// Open database/migrations/xxxx_create_fruits_table.php:
// 打开 database/migrations/xxxx_create_fruits_table.php:
public function up(): void {
Schema::create('fruits', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('category');
$table->decimal('price', 8, 2);
$table->integer('stock');
$table->text('description')->nullable();
$table->boolean('is_available')->default(true);
$table->timestamps();
});
}
// Run:
// 执行:
php artisan migrate
PART 3: Model
Configure the Fruit model to allow mass assignment and cast the boolean field.
配置 Fruit 模型以允许批量赋值,并对布尔字段进行类型转换。
// Open app/Models/Fruit.php:
// 打开 app/Models/Fruit.php:
class Fruit extends Model {
protected $fillable = [
'name', 'category', 'price', 'stock', 'description', 'is_available',
];
protected $casts = [
'is_available' => 'boolean',
];
}
PART 4: Routes
Define the application routes. Note: Use reports.csv instead of reports.excel.
定义应用程序路由。注意:请使用 reports.csv 而非 reports.excel。
// Open routes/web.php:
// 打开 routes/web.php:
Route::middleware('auth')->group(function () {
Route::get('/', function () { return redirect()->route('fruits.index'); });
Route::resource('fruits', FruitController::class);
Route::get('/reports', [ReportController::class, 'index'])->name('reports.index');
Route::get('/reports/pdf', [ReportController::class, 'exportPdf'])->name('reports.pdf');
Route::get('/reports/csv', [ReportController::class, 'exportCsv'])->name('reports.csv');
// ... (other profile routes)
});
PART 5: Fruit Controller
Handle CRUD operations for the fruit inventory.
处理水果库存的增删改查(CRUD)操作。
// Open app/Http/Controllers/FruitController.php:
// 打开 app/Http/Controllers/FruitController.php:
public function store(Request $request) {
$request->validate([ /* validation rules */ ]);
$data = $request->all();
$data['is_available'] = $request->has('is_available') ? 1 : 0;
Fruit::create($data);
return redirect()->route('fruits.index')->with('success', 'Fruit added successfully!');
}
PART 6: Report Controller
Implement logic for filtering data and exporting reports to PDF or CSV.
实现数据筛选逻辑,并将报表导出为 PDF 或 CSV 格式。
// Open app/Http/Controllers/ReportController.php:
// 打开 app/Http/Controllers/ReportController.php:
public function exportCsv(Request $request) {
// Logic to fetch filtered fruits and generate CSV output
// 获取筛选后的水果数据并生成 CSV 输出的逻辑
$callback = function () use ($fruits) {
$file = fopen('php://output', 'w');
fputcsv($file, ['Name', 'Category', 'Price/kg', 'Stock', 'Available', 'Description']);
foreach ($fruits as $fruit) {
fputcsv($file, [$fruit->name, $fruit->category, $fruit->price, $fruit->stock, $fruit->is_available, $fruit->description]);
}
fclose($file);
};
return response()->stream($callback, 200, $headers);
}