paneedesign/storage-bundle
A Laravel storage bundle that simplifies file and disk management. It offers a lightweight layer for handling uploads, storage paths, and common filesystem operations, reducing boilerplate so you can focus on building features rather than wiring up storage logic.
The only concrete signal in v6.0.3 is a schema change: PR #5 alters the type of the package's url column. Treat this release as a migration-level patch, not a feature drop — the first thing to do is confirm what your database actually looks like after upgrading.
Minimal steps:
composer update to pull v6.0.3.php artisan vendor:publish --tag=<package>-migrations
php artisan migrate --pretend
Schema::getColumnType('<table>', 'url'); // 'string' | 'text' | ...
or on MySQL: SHOW CREATE TABLE <table>;Where to look first: the package's migrations directory and the model/cast that maps the url attribute. If the column moved from VARCHAR(255) to TEXT, anything that relied on the old width, on a plain index, or on a max:255 validation rule is now your problem surface.
First use case: take one existing record with a long URL (signed S3 URLs, OAuth callbacks with query strings, tracking links) that previously would have been truncated or rejected, save it, and read it back. That single round-trip tells you whether the column change actually bought you anything in your app.
Wrap the upgrade in a regression check. Before and after the migration, assert on real data:
$record = Model::create(['url' => $longUrl]);
$this->assertSame($longUrl, $record->fresh()->url);
$this->assertSame(strlen($longUrl), strlen($record->fresh()->url));
Truncation is silent on MySQL in non-strict mode, so a passing save() is not proof.
Keep validation aligned with the new column. If the column is now wider, relax the rule deliberately rather than leaving a stale cap:
'url' => ['required', 'url', 'max:2048'], // was max:255
If it is now TEXT, note that max: is a validation guardrail, not a database constraint — don't let it drift to max:65535 just because the column allows it.
Prefer a cast/accessor over raw column reads. Centralise normalisation so a future type change (again) is a one-file edit:
protected function url(): Attribute
{
return Attribute::make(
get: fn ($value) => $value,
set: fn ($value) => rtrim($value), // or URL normalisation
);
}
Handle the migration on existing rows. A type change on a populated table is not free. On large tables, plan for lock time; on MySQL, ALTER TABLE ... MODIFY may rebuild the table. If the package migration is naive, wrap it in your own ordering or run it during a maintenance window.
Backfill-aware pattern: if the old column was narrower than the new one and any data was previously truncated, the migration cannot recover it. Compare against any upstream source of truth (referrer logs, job payloads) if URL integrity matters.
Integration tip: if you index or unique-constrain the url column, re-check the index after the type change — MySQL cannot index a TEXT column without a prefix length, and utf8mb4 index byte limits (3072) bite at ~768 characters. If uniqueness on full URLs is a requirement, an explicit url_hash (e.g. sha256) column with a unique index is more robust than indexing a variable-width string.
vendor/ before running migrate in production; do not infer from the version bump.v6.0.3 as needing a deploy window even though the number looks benign.SHOW CREATE TABLE before/after.VARCHAR length entirely, so a "widening" change may be a no-op locally and a real ALTER in production — your local tests will not catch it. Postgres varchar(n) → text is a metadata-only change and effectively instant; MySQL is not.down() can revert the column type but cannot restore rows that were truncated on the way in. Snapshot the table (or at least SELECT MAX(LENGTH(url))) before migrating.1406 Data too long or String data, right truncated, the column change did not apply — check that the package migration is actually registered in migrations table and not shadowed by your own earlier migration that redefines the same column."<vendor>/<package>": "6.0.2" is a reasonable hedge until you've read PR #5's diff.6.0.4 correcting an index or default that the first PR missed. Check the issue tracker for reports against 6.0.3 before rolling wide.How can I help you explore Laravel packages today?