masilia/clamav-bundle
Masilia ClamAV Bundle adds ClamAV antivirus scanning to Symfony/PHP applications. It provides configurable services to scan uploaded files for malware before storage or processing, helping protect file-handling workflows with a simple integration.
The v1.0.0-beta tag ships with no changelog beyond a one-line "beta release" note, so treat the source as the specification until the maintainers publish upgrade notes.
stable minimum, so a bare composer require vendor/package will fail or silently resolve to an older tag:
composer require vendor/package:^1.0@beta
composer.json (PHP/Laravel version constraints, extra.laravel.providers and aliases for auto-discovery), the README, CHANGELOG.md, and src/ root. On a beta with terse notes, src/ tells you what the README forgot.extra.laravel, no manual registration is needed. Publish assets before writing any code:
php artisan vendor:publish --provider="Vendor\Package\PackageServiceProvider"
Check whether that publishes a config file, migrations, or both, and run php artisan migrate if migrations land.php artisan tinker session and exercise the single golden path from the README end to end — resolve the binding, call the primary method, inspect the result. Do this in a disposable app, not your production codebase, so you can delete it cleanly if the beta disappoints.vendor/bin/phpunit or pest inside vendor/vendor/package) to see which Laravel versions the maintainers actually exercise. That is a better compatibility signal than the composer.json constraint.final class InvoiceSyncer
{
public function __construct(private \Vendor\Package\Client $client) {}
}
config/package.php plus env() indirection. Publish the config, keep secrets in .env, and reference them only from the config file — never call env() outside config, or config:cache will silently return null in production.phpunit.xml, set the package's config to a fake/sandbox driver. Bind a stub implementation in setUp() and assert against your wrapper, not the vendor class:
$this->app->instance(Client::class, new FakeClient());
1.0.0-beta or ^1.0@beta) and commit composer.lock. Treat every beta bump as a potential breaking change and re-read the diff before upgrading.1.0.0-beta.2 can rename methods or drop config keys with no deprecation path. Budget for a re-read of the source on each bump, and don't let the vendor namespace leak into your domain layer.config:cache bites first. If behaviour differs between php artisan serve and a deployed environment, run php artisan config:clear && php artisan config:cache locally and re-test. Stale cached config is the most common "the package is broken" false alarm.vendor:publish will not overwrite existing files without --force, so a config change in a beta bump may never reach your app. Diff the vendor config against yours after every upgrade.php artisan about to confirm the provider loaded; app()->bound(SomeContract::class) in tinker; php artisan event:list if you expect the package to emit events; Laravel Telescope for the actual query/job/HTTP trail. If a facade returns something unexpected, resolve the underlying class from the container — the facade accessor is a frequent typo source in early releases.extend() to add your own driver), macroable traits, and published events you can listen to rather than subclassing vendor internals. Prefer all four over forking.How can I help you explore Laravel packages today?