2025年12月29日 星期一

Laravel12_GoogleDriveLike_Work

零、專案總藍圖
01.可登入的Laravel 12 專案
02.資料夾結構+資料庫設計
03.檔案上傳/列表
04.檔案下載/刪除
05.權限與Policy
06.分享連結
07.UI優化+README



一、建立 Laravel 12 專案
    01.指令:composer create-project laravel/laravel drive-clone
                   cd drive-clone

    02.設定 .env 

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=drive_cloud
DB_USERNAME=root
DB_PASSWORD=

    03.指令:php artisan migrate

二、安裝登入系統(Breeze)
    01.指令:composer require laravel/breeze --dev

                   php artisan breeze:install 

                npm install
                npm run build
                php artisan migrate
    02.啟動:php artisan serve
   
三、建立 Folder Model 與 Migration
    1.指令:php artisan make:model Folder -m
    2.編輯 database/migrations/xxxx_create_folders_table.php
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->foreignId('parent_id')->nullable()->constrained('folders')->cascadeOnDelete();
$table->string('name');
    如下圖:
    3.指令:php artisan migrate

四、Folder 關聯(Model)
    1.編輯 app/Models/Folder.php
    protected $fillable = ['name','parent_id','user_id'];
    public function children() {
        return $this->hasMany(Folder::class, 'parent_id');
    }
    public function parent() {
        return $this->belongsTo(Folder::class, 'parent_id');
    }
    如下圖:

五、FolderController
    1.指令:php artisan make:controller FolderController
    2.編輯 app/Http/Controllers/FolderController.php
    public function store(Request $request) {
        Folder::create([
            'name' => $request->name,
            'parent_id' => $request->parent_id,
            'user_id' => auth()->id(),
        ]);
        return back();
    }
    如下圖:

六、Folder Route
    1.編輯 routes/web.php
// Folder
Route::post('/folders', [FolderController::class, 'store'])->name('folders.store');
    如下圖:

七、File Model
    1.指令:php artisan make:model File -m
    2.編輯 database/migrations/xxxx_create_files_table.php
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->foreignId('folder_id')->nullable()->constrained()->cascadeOnDelete();
$table->string('original_name');
$table->string('path');
$table->bigInteger('size');
$table->string('mime_type');
    如下圖:

八、檔案上傳
    1.指令:php artisan make:controller FileController
    2.編輯 app/Http/Controllers/FileController.php
    public function upload(Request $request) {
        $file = $request->file('file');
        $path = $file->store('user-files/', auth()->id());
        File::create([
            'user_id' => auth()->id(),
            'folder_id' => $request->folder_id,
            'original_name' => $file->getClientOriginalName(),
            'path' => $path,
            'size' => $file->getSize(),
            'mime_type' => $file->getMimeType(),
        ]);
        return back();
    }
    如下圖:

九、建立主畫面(Drive 頁)
    1.編輯 routes/web.php

沒有留言:

張貼留言

Laravel12_GoogleDriveLike_Work

零、專案總藍圖 01.可登入的Laravel 12 專案 02.資料夾結構+資料庫設計 03.檔案上傳/列表 04.檔案下載/刪除 05.權限與Policy 06.分享連結 07.UI優化+README 一、建立 Laravel 12 專案     01. 指令:composer...