Carlos Mendez
Jan 2026
3 tabs
<?php
namespace VendorName\PackageName;
use Illuminate\Support\ServiceProvider;
class MyPackageServiceProvider extends ServiceProvider
{
public function register(): void
{
// Merge config
$this->mergeConfigFrom(
__DIR__.'/../config/mypackage.php',
'mypackage'
);
// Bind services
$this->app->singleton(MyService::class, function ($app) {
return new MyService($app['config']['mypackage']);
});
}
public function boot(): void
{
// Publish config
$this->publishes([
__DIR__.'/../config/mypackage.php' => config_path('mypackage.php'),
], 'config');
// Publish migrations
$this->publishes([
__DIR__.'/../database/migrations' => database_path('migrations'),
], 'migrations');
// Load migrations
$this->loadMigrationsFrom(__DIR__.'/../database/migrations');
// Load routes
$this->loadRoutesFrom(__DIR__.'/../routes/web.php');
// Load views
$this->loadViewsFrom(__DIR__.'/../resources/views', 'mypackage');
// Publish views
$this->publishes([
__DIR__.'/../resources/views' => resource_path('views/vendor/mypackage'),
], 'views');
// Register commands
if ($this->app->runningInConsole()) {
$this->commands([
Commands\MyCommand::class,
]);
}
}
}
{
"name": "vendorname/packagename",
"description": "A Laravel package description",
"type": "library",
"require": {
"php": "^8.1",
"illuminate/support": "^10.0"
},
"require-dev": {
"orchestra/testbench": "^8.0",
"phpunit/phpunit": "^10.0"
},
"autoload": {
"psr-4": {
"VendorName\\PackageName\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"VendorName\\PackageName\\Tests\\": "tests/"
}
},
"extra": {
"laravel": {
"providers": [
"VendorName\\PackageName\\MyPackageServiceProvider"
],
"aliases": {
"MyPackage": "VendorName\\PackageName\\Facades\\MyPackage"
}
}
},
"minimum-stability": "dev",
"prefer-stable": true
}
<?php
namespace VendorName\PackageName\Tests;
use Orchestra\Testbench\TestCase as Orchestra;
use VendorName\PackageName\MyPackageServiceProvider;
class TestCase extends Orchestra
{
protected function getPackageProviders($app)
{
return [
MyPackageServiceProvider::class,
];
}
protected function getEnvironmentSetUp($app)
{
// Setup test environment
$app['config']->set('database.default', 'testing');
$app['config']->set('mypackage.option', 'value');
}
}
3 files · php, json
Explain with highlit
Creating Laravel packages enables code reusability across projects. I structure packages with src/ for code, config/ for configuration, and database/ for migrations. Service providers register package components—routes, views, commands, configs. The publishes() method lets users customize assets. Auto-discovery automatically registers providers in Laravel 5.5+. Packages define dependencies in composer.json. I test packages independently with Orchestra Testbench. The loadRoutesFrom(), loadViewsFrom(), and loadMigrationsFrom() methods integrate package resources. For distribution, I publish to Packagist. Package development promotes modularity and open-source contribution.
Related snips
php
<?php
namespace App\Providers;
use App\Contracts\PaymentGateway;
use App\Services\StripePaymentGateway;
Laravel service container and dependency injection
laravel
dependency-injection
service-container
by Carlos Mendez
2 tabs
json
{
"private": true,
"scripts": {
"dev": "vite",
"build": "vite build"
},
Laravel mix/Vite for asset compilation
laravel
vite
assets
by Carlos Mendez
4 tabs
php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
Laravel database migrations for schema management
laravel
migrations
database
by Carlos Mendez
3 tabs
php
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
Laravel form requests for validation
laravel
validation
form-requests
by Carlos Mendez
2 tabs
php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
Laravel soft deletes for data retention
laravel
soft-deletes
eloquent
by Carlos Mendez
3 tabs
php
<?php
namespace App\Notifications;
use App\Models\Post;
use Illuminate\Bus\Queueable;
Laravel notifications for multi-channel messaging
laravel
notifications
email
by Carlos Mendez
2 tabs
Share this code
Here's the card — post it anywhere.