denosyscore / framework
DenoSys framework runtime core
Requires
- php: ^8.4.1
- ext-fileinfo: *
- ext-pdo: *
- denosyscore/auth: ^0.3.1
- denosyscore/cache: ^0.2.2
- denosyscore/console: ^0.4.0
- denosyscore/container: ^0.2.2
- denosyscore/contracts: ^0.2.4
- denosyscore/database: ^0.4.1
- denosyscore/encryption: ^0.2.2
- denosyscore/events: ^0.2.2
- denosyscore/filesystem: ^0.3.3
- denosyscore/hashing: ^0.2.2
- denosyscore/http: ^0.3.2
- denosyscore/queue: ^0.3.2
- denosyscore/rate-limiter: ^0.2.2
- denosyscore/routing: 0.6.0-alpha.1
- denosyscore/session: ^0.2.4
- denosyscore/support: ^0.1.0
- denosyscore/validation: ^0.3.3
- denosyscore/view: ^0.2.2
- doctrine/inflector: ^2.1
- geoip2/geoip2: ^2.13
- graham-campbell/result-type: ^1.1
- html2text/html2text: ^4.3
- laminas/laminas-diactoros: ^3.6
- laminas/laminas-httphandlerrunner: ^2.12
- league/flysystem: ^3.30
- league/flysystem-aws-s3-v3: ^3.30
- mailgun/mailgun-php: ^4.3
- monolog/monolog: ^3.9
- nesbot/carbon: ^3.10
- nyholm/psr7: ^1.8
- psr/container: ^2.0
- psr/event-dispatcher: ^1.0
- psr/log: ^3.0
- psr/simple-cache: ^3.0
- symfony/console: ^7.4
- symfony/filesystem: ^7.4.23
- symfony/http-client: ^5.4.56
- symfony/mailer: ^8.0
- vlucas/phpdotenv: ^5.5
Requires (Dev)
- fakerphp/faker: ^1.24
- filp/whoops: ^2.18
- friendsofphp/php-cs-fixer: ^3.89
- mockery/mockery: ^1.6
- pestphp/pest: ^4.1
- pestphp/pest-plugin-stressless: ^4.0
- pestphp/pest-plugin-type-coverage: ^4.0
- phpmd/phpmd: ^2.15
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.1
- squizlabs/php_codesniffer: ^4.0
- symfony/var-dumper: ^8.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main
- v0.7.0
- v0.6.1
- v0.6.0
- v0.5.2
- v0.5.1
- v0.5.0
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.0
- v0.2.1
- v0.2.0
- v0.1.0
- dev-codex/console-mail-distribution
- dev-codex/fix-mailer-helper
- dev-codex/framework-distribution-contract
- dev-codex/symfony-advisory-floors
- dev-codex/filesystem-floor
- dev-codex/env-helper-process-values
- dev-codex/mail-provider
- dev-codex/form-mail-integration
- dev-codex/form-request-lifecycle
- dev-codex/queue-console-minor-constraints
- dev-codex/optional-env-files
This package is auto-updated.
Last update: 2026-11-04 22:58:06 UTC
README
DenoSys framework runtime core package.
Installation
composer require denosyscore/framework
Recommended App Skeleton
Use the official app skeleton for new projects:
composer create-project denosyscore/app my-app
What This Package Provides
Denosys\Applicationruntime core- Bootstrap/config/environment/routing glue under
src/ - Global framework helpers via
support/helpers.php - Transitive installation of all modular
denosyscore/*runtime packages
Starting with framework 0.6.0, its Composer requirements define a tested
distribution of the modular runtime packages. An application can require the
framework without repeating its component requirements. Framework code and
public component APIs are still available under their Denosys\ namespaces.
If an application imports a third-party library directly, declare that library
in the application's own Composer requirements. PHP 8.4.1 or newer is required.
Environment files
EnvironmentManager::load($directory, $files) treats missing files in the
ordered filename list as optional. It loads the first present file according
to dotenv's normal precedence and emits no PHP warning when none are present.
The directory itself must exist. Run composer test to verify this contract
locally.
The global env() helper reads an explicit $_ENV value first and falls back
to the process environment through getenv(). Process overrides therefore work
in CLI configurations that do not populate $_ENV. Missing keys return the
provided default; the usual boolean and null string values are cast.
Mail provider
Register Denosys\Mail\MailServiceProvider with Application::withProviders()
when an application needs Symfony\Component\Mailer\MailerInterface. The
provider binds a lazy TransportInterface and mailer. Set mail.dsn for a
Symfony-supported transport, or configure mail.default as smtp or
sendmail with mail.mailers.smtp.* or mail.mailers.sendmail.path.
The global mailer() helper resolves the provider's MailerInterface binding;
it is available after registering the provider. Call send() with a Symfony
Email instance or inject MailerInterface into an application service.
Unsupported drivers throw when the mailer is resolved; they never silently
discard messages. A working transport and sender address are required before
sending account or other transactional mail.
Framework 0.7.0 requires Console 0.4.0, whose make:mail command generates
Symfony MIME Email messages accepted by this provider. Its former Markdown
option is removed because no Markdown renderer is registered by the framework.
Form requests in route handlers
The framework's registered route invocation strategy constructs a type-hinted
Denosys\Http\FormRequest subclass from the current PSR-7 request, supplies
the current authenticated user and route arguments, supplies the framework
container, and calls validate() before the handler. A denied
authorize() or invalid field rule prevents handler invocation and propagates
through the configured exception pipeline. Each invocation uses its own
request, including when the strategy and handler are reused.
Form-request subclasses should retain the package's Request constructor
contract. This behavior is provided by the framework bridge; the standalone
routing package remains independent of HTTP form requests.
HTTP routing errors
The default router returns PSR responses for routing HTTP exceptions, including 404 for unknown paths and 405 for unsupported methods. Its global HTTP exception middleware runs inside CORS so those responses retain CORS headers. Unexpected exceptions continue through the configured exception pipeline.
Framework 0.6.0 and later require database 0.4.1 or newer within that release line; CI verifies minimum and current published component combinations.
Filesystem configuration
The framework's ConfigurationInterface extends the shared
Denosys\Contracts\Config\ConfigurationReaderInterface. During application
bootstrap, the reader binding resolves the current configuration binding,
including after it is replaced. A prepared replacement container passed to
Application::setContainer() receives the reader binding if it lacks one.
FilesystemServiceProvider reads the shared interface and uses the existing
path.storage binding, keeping default local files in the storage app
directory. Framework 0.5.1 requires filesystem 0.3.2 and contracts 0.2.4 or newer
within their respective release lines. Release contracts before filesystem,
then framework, before updating a consumer's Composer lockfile.
Framework 0.5.2 raises the filesystem and Symfony Filesystem/HTTP Client
minimums to patched releases without changing the framework API.
Repository Workflows
CI: composer validation, minimum/current published component installs, tests, PHP syntax checks, and security audits on PHP 8.4 and 8.5Release: publish GitHub release on semantic tagsDependabot: weekly Composer dependency checks
Releases
After CI passes on main, create an annotated semantic version tag from that
reviewed commit and push it. The Release workflow publishes a GitHub Release.
Confirm the matching version is available in the Composer package index before
updating consumers.