I am trying to develop a new Laravel package locally installed via Composer.
These are my steps:
I install a new Laravel application with composer create-project laravel/laravel my-application
I create a new directory in the root with the following content:
packages/randolf/custom-package/composer.json
{
"name": "randolf/custom-package",
"description": "My new Custom Package",
"type": "library",
"license": "MIT",
"require": {},
"autoload": {
"psr-4": {
"Randolf\\CustomPackage\\" : "src/"
}
},
"extra": {
"laravel": {
"providers": [
"Randolf\\CustomPackage\\CustomPackageServiceProvider"
],
"aliases": {
"CustomPackage": "Randolf\\CustomPackage\\Facades"
}
}
}
}
packages/randolf/custom-package/src/CustomPackage.php
<?php
namespace Randolf\CustomPackage;
class CustomPackage
{
public function sayHi()
{
return "Hi from class!";
}
}
packages/randolf/custom-package/src/CustomPackageServiceProvider.php
<?php
namespace Randolf\CustomPackage;
use Illuminate\Support\ServiceProvider;
class CustomPackageServiceProvider extends ServiceProvider
{
public function boot()
{
}
public function register()
{
$this->app->bind('custom-package', function()
{
return new CustomPackage();
});
}
}
packages/randolf/custom-package/src/Facades/CustomPackageFacade.php
<?php
namespace Randolf\CustomPackage\Facades;
use Illuminate\Support\Facades\Facade;
class CustomPackageFacade extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor() { return 'custom-package'; }
}
I add my package in Laravel with composer, adding the repositories
key:
/composer.json
"repositories": {
"randolf/custom-package": {
"type": "path",
"url": "packages/randolf/custom-package",
"options": {
"symlink": true
}
}
},
"require": {
...
"randolf/custom-package": "@dev"
},
I run composer update
and the install, package discover and dump-autoload works correctly:
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
- Locking randolf/custom-package (dev-master)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing randolf/custom-package (dev-master): Junctioning from packages/randolf/custom-package
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: fruitcake/laravel-cors
Discovered Package: laravel/sail
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Discovered Package: randolf/custom-package
Package manifest generated successfully.
73 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
I create a route in routes/web.php
to test the facade:
Route::get('/test-facade', function () {
echo CustomPackage::sayHi();
});
Adjust the alias in the composer.json
to point to the Facade instead of its namespace:
"CustomPackage": "Randolf\\CustomPackage\\Facades\\CustomPackageFacade"