PHPackages                             phpdot/package - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [PSR &amp; Standards](/categories/psr-standards)
4. /
5. phpdot/package

ActiveLibrary[PSR &amp; Standards](/categories/psr-standards)

phpdot/package
==============

Attribute-driven package scanning, definition generation, and config scaffolding for PHPdot.

v1.9.0(1mo ago)0151MITPHPPHP &gt;=8.3

Since Apr 7Pushed 1mo agoCompare

[ Source](https://github.com/phpdot/package)[ Packagist](https://packagist.org/packages/phpdot/package)[ RSS](/packages/phpdot-package/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (6)Versions (11)Used By (1)

phpdot/package
==============

[](#phpdotpackage)

Attribute-driven package scanning, definition generation, and config scaffolding for PHPdot.

Scans vendor packages for container attributes (`#[Singleton]`, `#[Scoped]`, `#[Transient]`, `#[Config]`, `#[Binds]`), generates a cached container definitions file, scaffolds config files with PHPDoc descriptions and environment overrides, and ships a CLI inspector (`vendor/bin/package`) for full visibility into what's installed and what can be overridden.

---

Install
-------

[](#install)

```
composer require phpdot/package
```

Add the Composer script to your project:

```
{
    "scripts": {
        "post-autoload-dump": [
            "PHPdot\\Package\\Composer\\ComposerScript::postAutoloadDump"
        ]
    }
}
```

Every `composer install/update/require/remove` triggers a scan automatically.

---

How It Works
------------

[](#how-it-works)

```
composer require phpdot/i18n
    ↓
PackageScanner reads vendor/composer/installed.json
    → finds packages with phpdot/container in require or require-dev
    → extracts package metadata (description, url, author)
    → reflects attributed classes (#[Singleton], #[Scoped], #[Transient], #[Config], #[Binds])
    → parses @param PHPDoc descriptions for #[Config] DTOs
    ↓
DefinitionGenerator      → vendor/phpdot/definitions.php    (cached container definitions)
ManifestGenerator        → vendor/phpdot/manifest.php       (package metadata + ownedConfigs ledger)
ConfigFileGenerator      → config/{name}.php                (once, never overwritten)

```

At boot time:

```
$manager = new PackageManager(__DIR__);
$manager->load($builder);
// → requires vendor/phpdot/definitions.php
// → $builder->addDefinitions($definitions)
```

Zero reflection at runtime. One `require`. OPcached.

---

Directory Convention
--------------------

[](#directory-convention)

```
my-app/
├── config/                   VALUES — developer edits these
│   └── i18n.php              auto-generated from #[Config('i18n')]
│
└── vendor/
    └── phpdot/               auto-generated, never edited
        ├── definitions.php
        └── manifest.php

```

`config/` is for values. `vendor/phpdot/` is for framework internals.

Override default bindings directly in your application bootstrap using `phpdot/container`'s API — `add()`, `addDefinitions()`, or `when()->needs()->provide()`. No scaffolded override files.

---

Configurable Paths
------------------

[](#configurable-paths)

Override directories via `composer.json`:

```
{
    "config": {
        "vendor-dir": "vendor"
    },
    "extra": {
        "phpdot": {
            "config-dir": "settings",
            "exclude": ["some/package"]
        }
    }
}
```

`PackageManager` reads `composer.json` from the base path and resolves all directories automatically. Defaults: `vendor-dir` = `vendor`, `config-dir` = `config`. Falls back to defaults if `composer.json` is missing. The `exclude` list skips those packages from scanning.

---

Generated Config Files
----------------------

[](#generated-config-files)

When a package has a `#[Config]` DTO, the scanner generates a config file with PHPDoc descriptions from `@param` tags, default values, and environment override blocks:

```
