Creating a package in Laravel 5.8
In this article, we will discuss “Laravel 5.8 Package Development from Scratch”. Here we describe the package development steps creating and using packages. You can also check the official Laravel doc for package development. I’m creating an example package details given below:
List of contents:
- Prerequisites
- Creating package skeleton and structure and some basic folders and files including Service providers, classes and composer.json.
- Creating a Service Provider
- Creating Controller, Model, Migrations and views in the package
- Publish config file
Creating Package Skeleton
We are using “laravel/packager”, it will generate all the necessary files.
Using composer — run the below command in the terminal
composer require jeroen-g/laravel-packager
After executing the above composer command, It will add all the necessary dependencies into your Laravel application.
You can check the newly generated artisan commands in your terminal by running this artisan command.
php artisan list
Packager commands:
Now, lets run “packager:new” artisan command to create a new package.
// Syntax - php artisan packager:new vendor_name package_name
php artisan packager:new gkblabs subscription
After executing the “packager:new” command, new directory “packages” created on the root of the Laravel app. The “packages” directory contains the newly created package within the folder name “gkblabs” and this directory contains the new package files named “subscription”.
You need to add more details regarding author name, email, package homepage if any, and license info for your package.
Time to adjust your composer.json extra section to enable automatic package discovery.
“extra”: { “laravel”: { “providers”: [ “vendor_name\\package_name\\service_provider_name” ] } },
All other autoload configuration update automatically. As you can check your “composer.json”.
"autoload": {"psr-4": {"gkblabs\\susbscription\\": "packages/gkblabs/susbscription/src","App\\": "app/"},"classmap": ["database/seeds","database/factories"]},"autoload-dev": {"psr-4": {"gkblabs\\susbscription\\": "packages/gkblabs/susbscription/src","Tests\\": "tests/"}},
Now lets test and see if our package is being loaded correctly. Inside the boot method of your SubscriptionServiceProvider.php
, let’s add a route and load it:
// Register the routes in Service provider
$this->loadRoutesFrom(__DIR__.'/routes/web.php');
Please note that:
__DIR__
refers to the current directory where the file is.routes/web.php
refers to the routes folder we are to create for our package, which will live in oursrc
folder, not the defaultLaravel
routes.
Also, you need to add your service provider to “config/app.php” file. It is necessary when your package will be autoloaded via composer and automatic package discovery. But we are using the ” jeroen-g/laravel-packager” package. This will update the provider when we create a package.
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,/*
* Package Service Providers...
*/
gkblabs\susbscription\susbscriptionServiceProvider::class,/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
Note: If your package wants another package to complete the functionality. Then you can easily add them. You just need to add the required package into the package “composer.json”.
After that on your terminal in the root of your app run:
composer dump-autoload
In our package routes folder add the web.php
file and add the following code to it:
<?phpRoute::get('subscription', function(){
return '<h1>Welcome to GKB Labs and Hai form subscription package</h1';
});
?>
Now start your Laravel app using:
php artisan serve
Now open http://localhost:8000/subscription
Service Providers
Service providers are the connection points between your package and Laravel. A service provider is responsible for binding things into Laravel’s service container and informing Laravel where to load package resources such as views, configuration, and localization files.
A service provider extends the Illuminate\Support\ServiceProvider
class and contains two methods: register
and boot
.
-to be conituned…