mj-zana / contracts
This package is abandoned and no longer maintained.
No replacement package was suggested.
Abandoned: Zana 2 packages own their contracts. See the README for where each interface moved.
v1.0.0
2026-08-09 10:42 UTC
Requires
- php: ^8.1
- psr/container: ^2.0
- zana/ddd: ^1.0
Requires (Dev)
- phpunit/phpunit: ^10.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Warning
This package is abandoned. It gets no 2.x release. In Zana 2, each package owns its own contracts (ADR-006, ADR-014). Version 1.x keeps working, and Composer warns that the package is abandoned.
Where each interface moved
1.x (Zana\Contracts\…) |
Zana 2 |
|---|---|
Container\* |
Zana\Container\Contracts\* in mj-zana/container |
Configuration\ConfigurationInterface |
Zana\Configuration\ConfigurationInterface in mj-zana/configuration |
Application\ApplicationInterface |
Zana\Core\ApplicationInterface in mj-zana/core |
Application\ConsoleKernelInterface |
Zana\Console\ConsoleKernel in mj-zana/console |
Application\CommandInterface, QueryHandlerInterface, CommandHandlerInterface |
Zana\Ddd\Application\Command and Query in mj-zana/ddd; handlers use #[Zana\Mediator\Attribute\Handles] in mj-zana/mediator |
Mediator\MediatorInterface |
Zana\Mediator\MediatorInterface in mj-zana/mediator |
Pipeline\* |
Zana\Mediator\PipelineBehavior in mj-zana/mediator, or PSR-15 middleware for HTTP |
Http\RequestInterface, ResponseInterface |
PSR-7 Psr\Http\Message\ServerRequestInterface and ResponseInterface |
Http\MiddlewareInterface |
PSR-15 Psr\Http\Server\MiddlewareInterface |
Http\KernelInterface |
Zana\Http\HttpKernel in mj-zana/http |
Http\Exceptions\* |
Zana\Http\Exception\* (HttpException, NotFoundHttpException, MethodNotAllowedHttpException, ...) in mj-zana/http |
Routing\* |
Zana\Routing\Router and Route in mj-zana/routing |
Database\ConnectionInterface |
Zana\Database\ConnectionInterface in mj-zana/database |
Domain\RepositoryInterface |
Zana\Ddd\Domain\RepositoryInterface in mj-zana/ddd |
The rest of this file documents 1.x.
Purpose
mj-zana/contracts is the public API surface of the framework. It contains the
interfaces, enums, and lightweight immutable value types that appear in the
signatures of public contracts. Packages depend on this common, dependency-free
foundation rather than on each other's concrete classes.
mj-zana/contracts ← public API surface (interfaces, enums, value types)
▲ ▲
│ │
http/routing middleware/container/...
Content
| Namespace | Contracts |
|---|---|
Zana\Contracts\Http |
RequestInterface, ResponseInterface, KernelInterface, MiddlewareInterface |
Zana\Contracts\Routing |
RouterInterface, RouteInterface |
Zana\Contracts\Pipeline |
PipelineInterface, MiddlewareInterface |
Zana\Contracts\Container |
ContainerInterface, ServiceProviderInterface, ServiceScopeInterface, ScopeMetadataInterface, ScopeType, ServiceLifetime, DisposableInterface |
Zana\Contracts\Configuration |
ConfigurationInterface |
Zana\Contracts\Events |
EventDispatcherInterface |
Rules
- Public API surface — anytime a type appears in the signature of a public
contract (interface, enum, or value object), it belongs in
mj-zana/contracts. Implementations stay in their respective packages. - Representation interfaces are complete — if a concrete type represents a
framework object that may cross package boundaries (
RequestInterface,ResponseInterface,RouteInterface,ScopeMetadataInterface, ...), its interface fully describes its public behavior. Consumers never need to cast back to a concrete class. - Capability interfaces are minimal — capability interfaces expose only the
behavior required to perform the capability (
DisposableInterface,CacheInterface,LoggerInterface, ...). They stay as small as possible. - Enums in contracts — any enum appearing in a public contract
(
ScopeType,RouteMethod,CacheStrategy, ...) belongs inmj-zana/contracts. - Only promote what's shared — if an interface has one implementation and nobody outside its package needs it, keep it in that package.
- Exceptions are implementation details — they stay in their packages unless they are part of the public API consumed across packages.
Install
composer require mj-zana/contracts