Awesome-claude-code yii-knowledge
Yii framework knowledge base. Provides Yii3 modular architecture, DDD integration, PSR-7/PSR-15 compliance, persistence, DI, security (RBAC, auth), event system (PSR-14), queue/jobs, infrastructure components (cache, rate limiter, HTTP client), testing, and antipatterns for Yii PHP projects.
git clone https://github.com/dykyi-roman/awesome-claude-code
T=$(mktemp -d) && git clone --depth=1 https://github.com/dykyi-roman/awesome-claude-code "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/yii-knowledge" ~/.claude/skills/dykyi-roman-awesome-claude-code-yii-knowledge && rm -rf "$T"
skills/yii-knowledge/SKILL.mdYii Knowledge Base
Quick reference for Yii3 framework patterns and PHP implementation guidelines. Yii3 is a complete rewrite — modular, PSR-compliant, and designed for modern PHP 8.4+ applications with clean architecture support.
Core Principles
PSR Compliance
Yii3 implements PSR-3 (log), PSR-4 (autoload), PSR-7/PSR-17 (HTTP messages/factories via
yiisoft/http-message), PSR-11 (DI via yiisoft/di), PSR-12 (coding style), PSR-15 (middleware via yiisoft/middleware-dispatcher).
Middleware Pipeline
Request → [Router] → [Auth] → [CORS] → [Action] → Response ↓ ↓ yiisoft/router Application Logic
Rule: All HTTP handling flows through the PSR-15 middleware pipeline. No global state.
Modular Package Architecture
Yii3 is split into independent packages (
yiisoft/*). Install only what you need. No monolithic framework dependency.
Quick Checklists
DDD-Compatible Yii3 Project
- Domain layer has zero
importsuse Yiisoft\ - ActiveRecord used only in Infrastructure layer
- Repository interfaces defined in Domain layer
- Value Objects used instead of primitives in Domain
- Actions/Controllers only map input and delegate to UseCases
- DI container configured via providers, not service locator
- Domain events dispatched through domain
port (not PSR-14 directly)EventDispatcherInterface - RBAC Rules delegate business logic to domain Specifications
- Queue handlers delegate to Application UseCases
- Infrastructure components (Cache, HTTP Client) accessed via domain ports
Clean Architecture Checks
- No
in Domain or Application layersYiisoft\ActiveRecord - No HTTP concerns (
) in Application layerServerRequestInterface - Middleware handles cross-cutting concerns (auth, CORS, logging)
- Config files separate from business logic
- Service providers wire interfaces to implementations
- Tests do not depend on Yii container for unit tests
Common Violations Quick Reference
| Violation | Where to Look | Severity |
|---|---|---|
| ActiveRecord in Domain | in Domain layer | Critical |
| Service Locator usage | outside composition root | Critical |
| Business logic in Action | if/switch on domain state in Controller/Action | Critical |
| Framework in Domain | in Domain namespace | Warning |
| Fat middleware | Middleware doing business logic | Warning |
| Missing input validation | Action without request validation | Warning |
| IdentityInterface in Domain | in Domain layer | Critical |
| RBAC logic in Domain | in Domain layer | Critical |
| Queue in Domain | in Domain layer | Critical |
| Cache/HTTP Client in Domain | or PSR-18 in Domain layer | Critical |
| Yii2 patterns in Yii3 | , global helpers | Critical |
PHP 8.4 Yii Patterns
Action (Single Action Controller)
declare(strict_types=1); namespace Presentation\Api\Order; final readonly class CreateOrderAction { public function __construct( private CreateOrderUseCase $createOrder, private OrderRequestMapper $mapper, ) {} public function __invoke(ServerRequestInterface $request): ResponseInterface { $dto = $this->mapper->fromRequest($request); $result = $this->createOrder->execute($dto); return $this->responseFactory->createJson($result->toArray(), 201); } }
PSR-15 Middleware
declare(strict_types=1); namespace Infrastructure\Http\Middleware; final readonly class CorrelationIdMiddleware implements MiddlewareInterface { public function process( ServerRequestInterface $request, RequestHandlerInterface $handler, ): ResponseInterface { $correlationId = $request->getHeaderLine('X-Correlation-ID') ?: Uuid::v4(); $request = $request->withAttribute('correlationId', $correlationId); return $handler->handle($request) ->withHeader('X-Correlation-ID', $correlationId); } }
UseCase with DI
declare(strict_types=1); namespace Application\Order\UseCase; final readonly class CreateOrderUseCase { public function __construct( private OrderRepositoryInterface $orders, private EventDispatcherInterface $events, ) {} public function execute(CreateOrderDTO $dto): OrderResultDTO { $order = Order::create( id: $this->orders->nextIdentity(), customerId: $dto->customerId, lines: $dto->lines, ); $this->orders->save($order); $this->events->dispatch(...$order->releaseEvents()); return OrderResultDTO::fromEntity($order); } }
References
For detailed information, load these reference files:
— Yii3 modular architecture, middleware pipeline, config systemreferences/architecture.md
— Extracting Domain from Yii, Repository pattern, Domain Eventsreferences/ddd-integration.md
— Routing, Actions, PSR-7/PSR-15 middlewarereferences/routing-http.md
— ActiveRecord, Cycle ORM, migrations, Repository patternreferences/persistence.md
— yiisoft/di container, service providers, PSR-11references/dependency-injection.md
— PHPUnit, fixtures, functional testing, middleware testingreferences/testing.md
— RBAC, authentication, IdentityInterface adapter, password hashing, CSRFreferences/security.md
— PSR-14 dispatcher, listeners, domain event bridge, stoppable eventsreferences/event-system.md
— yii-queue, messages, handlers, middleware pipelines, retry, channelsreferences/queue.md
— Cache (PSR-16), Rate Limiter, HTTP Client (PSR-18), Mailer with DDD portsreferences/infrastructure-components.md
— Yii2-in-Yii3 detection, framework coupling, fat controllers, RBAC in Domain, missing queue resiliencereferences/antipatterns.md