Skip to content

Models and exceptions

Custom model and table

php
namespace App\Models;

use Mattmy\FileMagic\Models\StoredFile as BaseStoredFile;

final class StoredFile extends BaseStoredFile
{
    protected $table = 'assets';
}
php
'model' => App\Models\StoredFile::class,
'table' => 'assets',

The custom model must extend the package model and set its $table to exactly the configured table value. FileMagic validates this before storing, finding, or deleting files, then uses the model's connection and primary key. Batch deletion does not apply global scopes or dispatch each model's deleting and deleted events; use single-model deletion when your application depends on those scopes or events.

Configure a custom table before publishing the migration. If already deployed, create a new migration rather than editing migration history.

0.x upgrade note

If your application calls StoredFile::temporaryUrl() directly, pass a DateTimeInterface expiration now. FileMagic::find($target)->temporaryUrl() keeps the configured default lifetime. A custom model must now declare the same $table as file-magic.table.

Exceptions

All exceptions extend FileMagicException.

ExceptionMeaning
InvalidConfigurationInvalid package configuration or matching operation option
InvalidFileSourceInvalid upload, path, or stream
InvalidBase64Invalid Base64 or Data URI
InvalidDocumentDataInvalid UTF-8, JSON data, or CSV rows
InvalidRemoteOptionsInvalid timeout, redirect, host, or port option
InvalidRemoteUrlMalformed or unsupported remote URL
RemoteAccessDeniedScheme, host, port, DNS, IP, or network policy rejected the URL
RemoteDownloadUnavailablePHP ext-curl is unavailable for fromUrl()
RemoteDownloadFailedDNS, TLS, connection, redirect, HTTP, or temporary download failure
InvalidFileNameUnsafe or reserved name
InvalidStoragePathUnsafe directory
InvalidFileTargetInvalid ID, UUID, model, array, or Collection target
InvalidStoredFileModelConfigured model does not extend the package StoredFile or uses a different table
FileTooLargeByte limit exceeded
DisallowedMimeTypeMIME type rejected
FileWriteFailedStorage write, collision, replacement, or deletion failure
FileRecordFailedDatabase persistence failure
FileRecoveryFailedAn overwrite failed and the original object could not be restored
PartialFileDeletionOnly confirmed missing objects and their records were deleted
FileNotFoundNo record matched, or physical content or stream is unavailable
ImageProcessingUnavailableMissing image dependency or driver while processing a supported image
ZipCreationUnavailablePHP ext-zip is unavailable
ZipCreationFailedTemporary ZIP creation or finalization failed
ZipLimitExceededZIP file-count or uncompressed-size limit exceeded

Handle errors in the application layer:

php
use Mattmy\FileMagic\Exceptions\FileMagicException;

try {
    $file = FileMagic::fromUpload($uploadedFile)->store();
} catch (FileMagicException $exception) {
    report($exception);

    return back()->withErrors(['file' => 'The file could not be stored.']);
}

The package deliberately does not choose HTTP status codes or response formats.

Last updated:

Released under the MIT License.