{"id":16292540,"url":"https://github.com/jigsawye/laravel-style-guide","last_synced_at":"2026-02-12T18:02:13.770Z","repository":{"id":35345812,"uuid":"39608165","full_name":"jigsawye/laravel-style-guide","owner":"jigsawye","description":"記錄了 imaclab 實作 Laravel Application 時的 Style Guide","archived":false,"fork":false,"pushed_at":"2015-09-11T05:28:18.000Z","size":152,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-02T06:38:30.327Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jigsawye.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-07-24T02:48:51.000Z","updated_at":"2018-02-21T03:31:09.000Z","dependencies_parsed_at":"2022-09-18T09:10:48.032Z","dependency_job_id":null,"html_url":"https://github.com/jigsawye/laravel-style-guide","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jigsawye/laravel-style-guide","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jigsawye%2Flaravel-style-guide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jigsawye%2Flaravel-style-guide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jigsawye%2Flaravel-style-guide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jigsawye%2Flaravel-style-guide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jigsawye","download_url":"https://codeload.github.com/jigsawye/laravel-style-guide/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jigsawye%2Flaravel-style-guide/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29375600,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T20:07:39.022Z","updated_at":"2026-02-12T18:02:13.736Z","avatar_url":"https://github.com/jigsawye.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# imaclab Laravel Style Guide\n\n*記錄了 imaclab 實作 Laravel Application 時的 Style Guide。*\n\n# 建構中...\n\n\u003ca name=\"table-of-contents\"\u003e\u003c/a\u003e\n## 目錄\n\n  1. [目錄結構]()\n    - [應用程式核心]()\n    - [其他]()\n  1. [第三方套件]()\n    - [require]()\n    - [require-dev]()\n  1. [Coding Style]()\n    - [程式碼相關]()\n    - [命名相關]()\n      - [資料表與欄位]()\n      - [Migration]()\n      - [Seeder]()\n      - [類別與方法]()\n      - [變數]()\n\n## 目錄結構\n### 應用程式核心\n```\napp\n├── Console - 自訂 Command\n│   └── Commands\n├── Events - 事件（對應 Listeners）\n├── Exceptions - 自訂例外\n├── Http\n│   ├── Controllers\n│   ├── Middleware - 所有的中介層\n│   └── Requests - 驗證的 Request 類別\n├── Jobs - 隊列排程\n├── Listeners - 監聽（對應 Events 及 Jobs（Queue））\n├── Models - 所有的 Model\n│   ├── Services - 所有 Service\n│   ├── Entities - 所有 Eloquest Model\n│   ├── Presenters - 所有顯示的 Presenters\n│   └── Repositories - 所有封裝的 Repository\n└── Providers - 框架的 Service Provider\n```\n### 其他\n```\n├── bootstrap - 框架啟動的核心\n├── config - 框架的設定檔案\n├── database - 資料庫相關\n│   ├── factories - 資料工廠\n│   ├── migration - 遷移\n│   └── seeds - 資料填充\n├── packages - 因該專案而開發的套件\n├── public - 公有資料夾，存放公有的 Assets\n│   ├── imgs - 圖片\n│   ├── css - Css\n│   ├── fonts - 字型\n│   └── js - JavaScript\n├── resources - 資源\n│   ├── assets - 需要 transpile 的資源檔\n│   │   ├── sass\n│   │   ├── css\n│   │   └── js\n│   ├── lang - 多國語言\n│   └── views - 視圖\n├── storage - 框架的快取等檔案\n├── tests - Unit Test\n└── vendor - 所有的框架核心及 Package\n```\n## 第三方套件\n初始化 Project 時請加上下述 Package，並查閱對應文件加上 Service Provider 及 Facade\n### require\n- `barryvdh/laravel-debugbar`\n  - https://github.com/barryvdh/laravel-debugbar\n  - 用於查看 booting time 及 query statement 或顯示變數用\n- `guidovanbiemen/laravel-whoops`\n  - https://github.com/guidovanbiemen/laravel-whoops\n  - Laravel 5 被移除的 whoops error handling\n- `laracasts/presenter`\n  - https://github.com/laracasts/Presenter\n  - 實作 Presenter pattern 的 Package\n- `laravelcollective/html`\n  - http://laravelcollective.com/docs/5.1/html\n  - Laravel 5 的 Form Builder\n\n### require-dev\n- `laracasts/generators`\n  - https://github.com/laracasts/Laravel-5-Generators-Extended\n  - 加強官方 artisan 的 generator 功能\n- `doctrine/dbal`\n  - https://github.com/doctrine/dbal\n  - 配合 ide-helper 產出 model 用於 autocomplate 的註解\n- `barryvdh/laravel-ide-helper`\n  - https://github.com/barryvdh/laravel-ide-helper\n  - dump 出 Class 結構的檔案，幫助 IDE 做 autocomplate\n  - 在 composer.json 的 scripts 加入以下程式碼，即可使用 \n    composer run-script ide-helper 產生檔案\n\n```\n...\n\"scripts\": {\n    ...\n    \"ide-helper\": [\n        \"php artisan clear-compiled\",\n        \"php artisan ide-helper:generate\",\n        \"php artisan ide-helper:meta\",\n        \"php artisan ide-helper:models --write\",\n        \"php artisan optimize\"\n    ]\n},\n...\n```\n評估中\n\n- https://github.com/prettus/l5-repository\n- https://github.com/Bosnadev/Repositories\n\n## Coding Style\n### 程式碼相關\n- 所有程式碼請參照 PSR-1 及 PSR-2 規範，可使用 phpcs 等工具協助\n  - PSR-1 中文 http://blog.mosil.biz/2012/08/psr-1-basic-coding-standard/\n  - PSR-2 英文 http://www.php-fig.org/psr/psr-1/\n  - PSR-2 中文 http://blog.mosil.biz/2012/09/psr-2-basic-coding-standard/\n  - PSR-2 英文 http://www.php-fig.org/psr/psr-2/\n\n- 遵照 ARCA pattern\n  - ARCA http://blog.turn.tw/?p=2290\n  - Repository http://blog.turn.tw/?p=2521\n  - Presenter http://blog.turn.tw/?p=2511\n\n- 在 Class 中避免使用 Facade，請改用 DI 替代\n\n```php\n//bad\nuse Request;\n...\npublic function store()\n{\n    $data = Request::all()\n}\n\n//good\nuse Illuminate\\Http\\Request;\n...\npublic function store(Request $request)\n{\n    $data = $request-\u003eall()\n}\n```\n\n### 命名相關\n#### 資料表與欄位\n- 資料表名稱請使用**複數英文**並使用**蛇底式命名法（snake_case）**\n\n```php\n// bad\nSchema::create('User', ...\nSchema::create('user', ...\n\n// good\nSchema::create('users', ...\n```\n\n- 多對多（或同性質）的 pivot table 請命名為`{單數資料表A}_{單數資料表B}`，並按照**英文字母順序排序**\n\n```php\n// bad\nSchema::create('articles_tags', ...\nSchema::create('article_tag_mapping', ...\nSchema::create('tag_article', ...\n\n// good\nScheam::create('article_tag', ...\n```\n\n- 資料表欄位請使用**蛇底式命名法（snake_case）**且一律**不加前綴字**\n\n```php\n//bad\n$table-\u003estring('Name');\n$table-\u003estring('u_name');\n\n// good\n$table-\u003estring('name');\n```\n\n- Primary Key 一律為 `id`\n\n```php\n// bad\n$table-\u003eincrement('uid');\n$table-\u003eincrement('pId');\n$table-\u003eincrement('p_id');\n\n// good\n$table-\u003eincrement('id');\n```\n\n- Foreign Key 一律為`{單數資料表名稱}_id`\n\n```php\n// bad\n$table-\u003einteger('UserId');\n$table-\u003einteger('userId');\n\n// good\n$table-\u003einteger('user_id');\n```\n\n#### Migration\n- 新建資料表的 migration 命名為 `create_{資料表名稱}_table`\n\n```shell\n// bad\nphp artisan make:migration users --create=users\n\n// good\nphp artisan make:migration create_users_table --create=users\n```\n\n- 增加欄位至原有資料表的 migration 命名為 `add_{欄位名稱}_to_{資料表名稱}_table`\n\n```shell\n// bad\nphp artisan make:migration update_articles --table=users\n\n// good\nphp artisan make:migration add_published_at_to_articles_table --create=users\n```\n\n#### Seeder\n- Seeder 請命名為 `{帕斯卡命名的單數資料表名稱}TableSeeder`\n\n```shell\n// bad\nphp artisan make:seeder articles\n\n// good\nphp artisan make:seeder ArticleTableSeeder\n```\n\n#### 類別與方法\n- 所有類別名稱請使用**帕斯卡命名法（PascalCase）**\n\n```php\n// bad\nclass Articles_Repository {...}\nclass articlesRepository {...}\n\n// good\nclass ArticlesRepository {...}\n```\n\n- 所有的 Resources Controller 名稱為**複數**\n\n```php\n// bad\nclass ArticleController extends Controller {...}\n\n// good\nclass ArticlesController extends Controller {...}\n```\n\n- 所有 Eloquent Model 名稱為**單數**\n\n```php\n// bad\nclass Users extends Model {...}\n\n// good\nclass User extends Model {...}\n```\n\n- 所有方法名稱請使用**駝峰式命名法（camelCase）**\n\n```php\n// bad\npublic function CreateArticle {...}\npublic function create_article {...}\n\n//good\npublic function createArticle {...}\n```\n\n#### 變數\n- 所有 PHP 變數名稱請使用**駝峰式命名法（camelCase）**\n\n```php\n// bad\n$request_data;\n$Request_Data;\n\n//good\n$requestData;\n```\n\n- 所有 HTTP 傳遞的參數名稱請使用**蛇底式命名法（snake_case）**\n\n```php\n// bad\n{!! Form::text('addressSwitch') !!}\n\n//good\n{!! Form::text('address_switch') !!}\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjigsawye%2Flaravel-style-guide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjigsawye%2Flaravel-style-guide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjigsawye%2Flaravel-style-guide/lists"}