Creating a Service Provider For Our Custom Laravel Hashing Implementations

November 30, 2016 —John Koster

In this article, we will create a service provider for all all of the custom hashing implementations that we created in previous articles. The articles about the hashing implementations can be found at these locations:

To register all the Illuminate\Contracts\Hashing\Hasher implementations with the application service container, we will create a new service provider named HashServiceProvider in the app/Providers/ directory. The path (relative to the project directory) would then be app/Providers/HashServiceProvider.php. The service provider itself will be fairly simple, just registering the implementations with a given name as singletons (some lines have been intentionally wrapped to improve readability):

1<?php
2 
3namespace App\Providers;
4 
5use Illuminate\Support\ServiceProvider;
6use Laravel\Artisan\Hashing\ExtendedDesHasher;
7use Laravel\Artisan\Hashing\StandardDesHasher;
8use Laravel\Artisan\Hashing\Md5Hasher;
9use Laravel\Artisan\Hashing\Sha256Hasher;
10use Laravel\Artisan\Hashing\Sha512Hasher;
11 
12class HashServiceProvider extends ServiceProvider
13{
14 /**
15 * Indicates if loading of the provider is deferred.
16 *
17 * @var bool
18 */
19 protected $defer = true;
20 /**
21 * Register the service provider.
22 *
23 * @return void
24 */
25 public function register()
26 {
27 $this->app->singleton('hash.extDes',
28 function () { return new ExtendedDesHasher; });
29 
30 $this->app->singleton('hash.des',
31 function () { return new StandardDesHasher; });
32 
33 $this->app->singleton('hash.md5',
34 function () { return new Md5Hasher; });
35 
36 $this->app->singleton('hash.sha256',
37 function () { return new Sha256Hasher; });
38 
39 $this->app->singleton('hash.sha512',
40 function () { return new Sha512Hasher; });
41 }
42 /**
43 * Get the services provided by the provider.
44 *
45 * @return array
46 */
47 public function provides()
48 {
49 return [
50 'hash.extDes', 'hash.des', 'hash.md5'.
51 'hash.sha256', 'hash.sha512'
52 ];
53 }
54}

Each implementation has been bound according to the format hash.<hashName>. This will be useful for our next step: creating a convenient hashing manager.

Some absolutely amazing
people

The following amazing people help support this site and my open source projects ♥️
If you're interesting in supporting my work and want to show up on this list, check out my GitHub Sponsors Profile.