> mobileapp Strategy - From Idea to Mobile App RealityVinova Our team will brainstorm with you on where to begin, where to go, and how to get you there. Whether you have a spark of an idea or an existing app – we can help. Getting your mobile strategy right is what our unique services are all about. We’ll wrestle with business challenges, discover new opportunities that will help you define and refine your product ideas into mobile app reality.

Service Providers in Laravel: What They Are and How to Use Them | Laravel News

Service Providers in Laravel: What They Are and How to Use Them | Laravel News

For those who haven’t actively used Service Providers in Laravel, it’s a mystical “term”: what “service” do they actually “provide”, and how exactly does it all work? I will explain it in this article.

Default Laravel Service Providers

Let’s start with the default service providers included in Laravel, they are all in the app/Providers folder:

They are all PHP classes, each related to its topic: general “app”, Auth, Broadcasting, Events, and Routes. But they all have one thing in common: the boot() method.

Inside of that method, you can write any code related to one of those sections: auth, events, routes, etc. In other words, Service Providers are just classes to register some global functionality.

They are separated as “providers” because they are executed really early in the Application Lifecycle, so it is convenient something global here before the execution script comes to Models or Controllers.

The most amount of functionality is in the RouteServiceProvider, let’s take a look at its code:

1class RouteServiceProvider extends ServiceProvider
3 public const HOME = ‘/dashboard’;
9 $this->routes(function () {
12 ->group(base_path(‘routes/api.php’));
14 Route::middleware(‘web’)
15 ->group(base_path(‘routes/web.php’));
21 RateLimiter::for(‘api’, function (Request $request) {
22 return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());

This is the class where route files are configured, with routes/web.php and routes/api.php included by default. Notice that for the API there are also different configurations: endpoint prefix /api and middleware api for all the routes.

You can edit those Service Providers however you want, they are not in the /vendor folder. Typical customization of this file happens when you have a lot of routes and you want to separate them in your custom file. You create routes/auth.php and put the routes there, and then you “enable” that file in the boot() method of the RouteServiceProvider, just add the third sentence:

1`Route::middleware(‘web’) // or maybe you want another middleware?
2 ->group(base_path(‘routes/auth.php’));

Other default service providers have other functionality, you can analyze them by yourself. Except for AppServiceProvider, it is empty, like a placeholder for us to add any code related to some global application settings.

One popular example of adding code to the AppServiceProvider is about disabling the lazy loading in Eloquent. To do that, you just need to add two lines into the boot() method:

1// app/Providers/AppServiceProvider.php
2use Illuminate\Database\Eloquent\Model;
6 Model::preventLazyLoading(! $this->app->isProduction());
7}

This will throw an exception if some relationship model isn’t eager loaded, which causes a so-called N+1 query problem with performance.

When Service Providers Are Executed?

If you look at the official docs about request lifecycle, these are the things executed in the very beginning:

Which providers are loaded? It’s defined in the config/app.php array:

8 * Laravel Framework Service Providers…
10 Illuminate\Auth\AuthServiceProvider::class,
11 Illuminate\Broadcasting\BroadcastServiceProvider::class,
13 // … other framework providers from /vendor
15 Illuminate\View\ViewServiceProvider::class,
18 * PUBLIC Service Providers – the ones we mentioned above
20 App\Providers\AppServiceProvider::class,
24 App\Providers\RouteServiceProvider::class,

As you can see, there’s a list of non-public service providers from the /vendor folder, you shouldn’t touch/edit them. The ones we’re interested in are at the bottom, with BroadcastServicerProvider disabled by default, probably because it’s rarely used.

All of those service providers are executed from top to bottom, iterating that list twice.

The first iteration is looking for an optional method register() which may be used to initiate something before the boot() method. I’ve never used it in my experience.

Then, the second iteration executes the boot() method of all providers. Again, one by one, from top to bottom of the 'providers' array.

And then, after all the service providers have been processed, Laravel goes to parsing the route, executing the Controller, using Models, etc.

Create Your Custom Service Provider

In addition to the existing default files, you can easily create your service provider, related to some other topics than the default ones like auth/event/routes.

Quite a typical example is configuration related to Blade views. If you want to create your Blade directive, you can add that code into any service provider’s boot() method, including the default AppServiceProvider, but quite often developers create a separate ViewServiceProvider.

You can generate it with this command:

1php artisan make:provider ViewServiceProvider
3use Illuminate\Support\ServiceProvider;
22 public function boot()

You may remove the register() method, and inside of boot() add Blade directive code:

1use Illuminate\Support\Facades\Blade;
5 Blade::directive(‘datetime’, function ($expression) {
6 return “<?php echo ($expression)->format(‘m/d/Y H:i’); ?>”;

Another example of a ViewServiceProvider is about View Composers, here’s the snippet from the official Laravel docs:

1use App\View\Composers\ProfileComposer;
3use Illuminate\Support\ServiceProvider;
9 // Using class based composers…
10 View::composer(‘profile’, ProfileComposer::class);
12 // Using closure based composers…
13 View::composer(‘dashboard’, function ($view) {

To be executed, this new provider should be added to the array of providers in config/app.php, as mentioned above:

6 App\Providers\AppServiceProvider::class,
10 App\Providers\RouteServiceProvider::class,
13 App\Providers\ViewServiceProvider::class,

Examples from Open-Source Projects

Finally, I want to mention a few examples from freely available Laravel projects.

1. spatie/freek.dev: BladeComponentServiceProvider

A well-known company Spatie has published the source code for the personal blog of Freek Van der Herten, with this file.

app/Providers/BladeComponentServiceProvider.php:

3use App\Http\Components\AdComponent;
5use Illuminate\Support\ServiceProvider;
11 Blade::component(‘ad’, AdComponent::class);
13 Blade::component(‘front.components.inputField’, ‘input-field’);
14 Blade::component(‘front.components.submitButton’, ‘submit-button’);
17 Blade::component(‘front.components.shareButton’, ‘share-button’);
19 Blade::component(‘front.components.postHeader’, ‘post-header’);
21 Blade::component(‘front.layouts.app’, ‘app-layout’);

One of the most-starred Laravel open-source projects has a separate file to register Collection macros:

app/Providers/MacroServiceProvider.php:

3use App\Helpers\CollectionHelper;
5use Illuminate\Support\ServiceProvider;
10 * Bootstrap any application services.
16 if (! Collection::hasMacro(‘sortByCollator’)) {
17 Collection::macro(‘sortByCollator’, function ($callback, $options = \Collator::SORT_STRING, $descending = false) {
21 return CollectionHelper::sortByCollator($collect, $callback, $options, $descending);
25 if (! Collection::hasMacro(‘groupByItemsProperty’)) {
30 return CollectionHelper::groupByItemsProperty($collect, $property);
34 if (! Collection::hasMacro(‘mapUuid’)) {
39 return $collect->map(function ($item) {

Laravel CMS called phpReel also has a service provider for Blade components, named even longer.

app/Providers/DashboardComponentsServiceProvider.php:

4use Illuminate\Support\ServiceProvider;
6use App\Helpers\FileUpload\UploadComponents;
8class DashboardComponentsServiceProvider extends ServiceProvider
27 Blade::directive(‘uploadForm’, function () {
29 $html = ‘<?php echo \ . $component . \’; ?>’;
31 return (‘<?php echo “‘ . $component . ‘”; ?>’);

You can also find a few more examples of Service Providers at my LaravelExamples.com website.

This content was originally published here.

Malcare WordPress Security

design agency singapore,singapore mobile app developer,mobile apps development singapore,android developer singapore,developers in singapore,singapore web design,web development company singapore,developer in singapore,singapore mobile application developer,web application singapore,design firms in singapore,graphic designer in singapore,mobile game developer singapore,web development singapore,app development singapore,mobile app development singapore,mobile app developer singapore,ios app development singapore,website development singapore,singapore app developer,web design singapore,singapore web design services,singapore web development,app developer singapore,website design singapore,mobile application development singapore,singapore website design,mobile apps singapore,mobile application developer singapore,mobile developer singapore,web design company singapore,web design services singapore,web designer singapore,ios developer singapore,ruby on rails developer singapore,website developer singapore,website designer singapore