[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EBH27BNB6STW2BWJR19X39":3,"skill-same:01M6EBH27BNB6STW2BWJR19X39":96},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6EBH27BNB6STW2BWJR19X39","laravel-clean-architecture",null,"Expert patterns for DDD, DTOs, and Ports & Adapters in Laravel. Use when applying Domain-Driven Design, DTOs, or ports-and-adapters patterns in Laravel. (triggers: app\u002FDomains\u002F**\u002F*.php, app\u002FProviders\u002F*.php, domain, dto, repository, contract, adapter)","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHoangNguyen0403\u002Fagent-skills-standard\u002Flaravel-clean-architecture\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"clean","laravel clean architecture","clean architecture","laravel","architecture","Providers","php","repository","ports","use","expert","design","patterns","ddd","domain","contract","triggers","app","adapter","domains","2026-11-10 10:12:30",false,"---\nname: laravel-clean-architecture\ndescription: 'Expert patterns for DDD, DTOs, and Ports & Adapters in Laravel. Use when applying Domain-Driven Design, DTOs, or ports-and-adapters patterns in Laravel. (triggers: app\u002FDomains\u002F**\u002F*.php, app\u002FProviders\u002F*.php, domain, dto, repository, contract, adapter)'\n---\n\n# Laravel Clean Architecture\n\n## **Priority: P1 (HIGH)**\n\n## Structure\n\n```text\napp\u002F\n├── Domains\u002F            # Logic grouped by business domain\n│   └── {Domain}\u002F\n│       ├── Actions\u002F    # Single use-case logic\n│       ├── DTOs\u002F       # Immutable data structures\n│       └── Contracts\u002F  # Interfaces for decoupling\n└── Providers\u002F          # Dependency bindings\n```\n\n## Implementation Guidelines\n\n### Domain-Driven Design (DDD)\n\n- **Grouping**: Organize code in **`app\u002FDomains\u002FOrder\u002F{Actions,DTOs,Contracts}\u002F`**. Group by business domain (**`User, Order, Payment`**) — not by type (Controllers, Models).\n- **Core Models**: Keep standard Eloquent models in **`app\u002FModels\u002F`**.\n- **Separation**: **Never put Eloquent queries in controllers**; delegate to **Action classes** for use-case logic.\n\n### Data Transfer Objects (DTOs)\n\n- **Immutability**: Create typed readonly DTOs:\n  ```php\n  readonly class OrderData {\n      public function __construct(\n          public readonly string $title,\n          public readonly int $amount\n      ) {}\n  }\n  readonly class CreateOrderData {\n      public function __construct(\n          public readonly string $customerId,\n          public readonly int $amount\n      ) {}\n  }\n  ```\n  Immutable by default in PHP 8.1+. DTOs cross boundaries — pass between layers instead of raw arrays or Eloquent models. No raw arrays between layers.\n\n### Repository Pattern & Decoupling\n\n- **Interfaces**: Create **`Contracts\u002FOrderRepository interface`** and implement **`EloquentOrderRepository`**.\n- **Binding**: Bind interfaces to implementations in **`AppServiceProvider`** via **`$this->app->bind(OrderRepository::class, EloquentOrderRepository::class)`**.\n- **Usage**: **Inject interfaces** into your actions\u002Fservices.\n- **Layer Flow**: Controller → Action → Repository Interface → Eloquent. DTOs cross boundaries at every layer transition.\n\n## Anti-Patterns\n\n- **No Eloquent in Controllers**: Bridge layers with DTOs and Actions.\n- **No raw arrays across layers**: Use typed `readonly` DTOs.\n- **No God Services**: Break into single-responsibility Actions.\n- **No concrete dependencies**: Depend on Interfaces, not implementations.\n\n## References\n\n- [DDD & Repository Patterns](references\u002Fimplementation.md)\n\n","# Laravel Clean Architecture\n\n## **Priority: P1 (HIGH)**\n\n## Structure\n\n```text\napp\u002F\n├── Domains\u002F            # Logic grouped by business domain\n│   └── {Domain}\u002F\n│       ├── Actions\u002F    # Single use-case logic\n│       ├── DTOs\u002F       # Immutable data structures\n│       └── Contracts\u002F  # Interfaces for decoupling\n└── Providers\u002F          # Dependency bindings\n```\n\n## Implementation Guidelines\n\n### Domain-Driven Design (DDD)\n\n- **Grouping**: Organize code in **`app\u002FDomains\u002FOrder\u002F{Actions,DTOs,Contracts}\u002F`**. Group by business domain (**`User, Order, Payment`**) — not by type (Controllers, Models).\n- **Core Models**: Keep standard Eloquent models in **`app\u002FModels\u002F`**.\n- **Separation**: **Never put Eloquent queries in controllers**; delegate to **Action classes** for use-case logic.\n\n### Data Transfer Objects (DTOs)\n\n- **Immutability**: Create typed readonly DTOs:\n  ```php\n  readonly class OrderData {\n      public function __construct(\n          public readonly string $title,\n          public readonly int $amount\n      ) {}\n  }\n  readonly class CreateOrderData {\n      public function __construct(\n          public readonly string $customerId,\n          public readonly int $amount\n      ) {}\n  }\n  ```\n  Immutable by default in PHP 8.1+. DTOs cross boundaries — pass between layers instead of raw arrays or Eloquent models. No raw arrays between layers.\n\n### Repository Pattern & Decoupling\n\n- **Interfaces**: Create **`Contracts\u002FOrderRepository interface`** and implement **`EloquentOrderRepository`**.\n- **Binding**: Bind interfaces to implementations in **`AppServiceProvider`** via **`$this->app->bind(OrderRepository::class, EloquentOrderRepository::class)`**.\n- **Usage**: **Inject interfaces** into your actions\u002Fservices.\n- **Layer Flow**: Controller → Action → Repository Interface → Eloquent. DTOs cross boundaries at every layer transition.\n\n## Anti-Patterns\n\n- **No Eloquent in Controllers**: Bridge layers with DTOs and Actions.\n- **No raw arrays across layers**: Use typed `readonly` DTOs.\n- **No God Services**: Break into single-responsibility Actions.\n- **No concrete dependencies**: Depend on Interfaces, not implementations.\n\n## References\n\n- [DDD & Repository Patterns](references\u002Fimplementation.md)\n\n",{"name":5,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FHoangNguyen0403\u002Fagent-skills-standard\u002Flaravel-clean-architecture",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill laravel-clean-architecture",{"tool":64,"command":65},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill laravel-clean-architecture",{"tool":67,"command":68},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill laravel-clean-architecture","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHoangNguyen0403\u002Fagent-skills-standard\u002Flaravel-clean-architecture\u002FSKILL.md",true,[72,78,84,88,92],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"customize.toml","OTHER","其他",1658,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.iflow\u002Fskills\u002Fgds-generate-project-context\u002Fcustomize.toml",{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"project-context-template.md","REFERENCE","参考文档",467,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.iflow\u002Fskills\u002Fgds-generate-project-context\u002Fproject-context-template.md",{"path":85,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":86,"sourceHtmlUrl":87},"steps\u002Fstep-01-discover.md",6453,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.iflow\u002Fskills\u002Fgds-generate-project-context\u002Fsteps\u002Fstep-01-discover.md",{"path":89,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":90,"sourceHtmlUrl":91},"steps\u002Fstep-02-generate.md",9620,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.iflow\u002Fskills\u002Fgds-generate-project-context\u002Fsteps\u002Fstep-02-generate.md",{"path":93,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":94,"sourceHtmlUrl":95},"steps\u002Fstep-03-complete.md",8256,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.iflow\u002Fskills\u002Fgds-generate-project-context\u002Fsteps\u002Fstep-03-complete.md",[97,109,119,128,134,141],{"skillNo":98,"name":99,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":105,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[102],{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[106,107,108],"model","model hierarchy","model hierarchy skill",{"skillNo":110,"name":111,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":115,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[114],{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},[116,117,118],"MCP","zoom","zoom mcp",{"skillNo":120,"name":121,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[125,126,127,117],"sdk","zoom apps sdk","apps",{"skillNo":129,"name":130,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[130],{"skillNo":135,"name":136,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":140,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[139],{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},[136],{"skillNo":142,"name":143,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[143]]