Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Default Laravel Package

php-standard-library/default

Provides a DefaultInterface for PHP classes to expose standardized “default” instances. Helps ensure consistent default construction across libraries and apps with a simple, shared contract.

View on GitHub
Deep Wiki
Context7

DefaultInterface for classes to provide standardized default instances

Frequently asked questions about Default
How does DefaultInterface improve Laravel’s service container or dependency injection?
DefaultInterface formalizes default object creation, making it compatible with Laravel’s DI system. You can bind defaults statically (e.g., `User::getDefault()`) or dynamically via the container (e.g., `$this->app->bind('default-user', fn() => User::getDefault())`). This ensures predictable defaults in services, jobs, or facades without manual instantiation.
Can I use this package with Laravel 10+ and PHP 8.1+ for better type safety?
Yes, the package leverages modern PHP features like static return types in `DefaultInterface`, which works seamlessly with Laravel 10+. This improves type safety and IDE autocompletion (e.g., PHPStorm) while maintaining backward compatibility with older Laravel versions.
Will implementing DefaultInterface slow down my application if defaults are heavy (e.g., database queries)?
Only if not optimized. Avoid eager initialization in `boot()`—use Laravel’s container to lazy-load defaults (e.g., bind a closure to the container). For example, `Cache::rememberForever()` can cache defaults to prevent redundant initialization.
How does this package help with API response consistency in Laravel?
DefaultInterface enforces standardized defaults for API responses (e.g., `DefaultResponse` for errors). This reduces versioning friction in microservices or modular apps by ensuring all layers return predictable structures, like empty collections or fallback data.
Is this package suitable for domain models like User or Order, or just simple classes?
It’s ideal for domain models where defaults must be consistent (e.g., `User::getDefault()` returning a `User` with placeholder data). For primitives (e.g., `[]` or `null`), the package adds unnecessary overhead, but it shines in complex objects like configurations or responses.
How do I migrate existing Laravel tests to use DefaultInterface instead of manual mocks?
Replace `createMock(User::class)` with `User::getDefault()` in tests. This reduces boilerplate and improves reliability by using the same default logic as production. For example, `User::getDefault()` ensures tests and live code share the same baseline.
Does this package work with Laravel’s facades (e.g., Cache, Mail) for default values?
Yes, facades can leverage `DefaultInterface` for defaults. For example, `Cache::rememberForever('key', fn() => MyModel::getDefault())` ensures consistent cached defaults. The package doesn’t replace facades but integrates cleanly with their existing patterns.
What are the risks of overusing DefaultInterface in every class?
Overuse can lead to unnecessary complexity for simple defaults (e.g., `return []`). Focus on classes where defaults are critical for consistency, like API responses, domain models, or shared services. Avoid it for trivial cases where manual defaults suffice.
Can I configure defaults dynamically (e.g., via environment variables or Laravel config) instead of hardcoding them?
Yes, defaults can be configured dynamically. Use Laravel’s bindings to override `getDefault()` behavior (e.g., `$this->app->bind('default-user', fn() => User::fromConfig())`). This keeps defaults flexible while maintaining the `DefaultInterface` contract.
Are there alternatives to DefaultInterface for Laravel defaults, like custom traits or Laravel’s built-in bindings?
Laravel’s service container bindings (e.g., `App::bind()`) are sufficient for simple cases, but they lack a standardized contract. Traits can work but may lead to code duplication. `DefaultInterface` provides a shared, testable contract that’s easier to enforce across teams and tools like PHPStan.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
nexmo/api-specification
capell-app/block-library
axium/identity
cetria/laravel-dummy-models
cetria/reflection-helper
agropredict/sso-auth-bundle
evolvestudio/spam-protection
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
develia/geo-bundle
dreamzy/livewire-charts
touchestate-sdk/php-sdk
ecotone/kafka
22h/doctrine-garbage-collection-bundle
agtp/agtp-php
agtp/mod-php
splash/sonata-admin
splash/metadata