Advertisement
  1. Code
  2. Laravel 5

Wie man einen Laravel-Helfer erstellt

Scroll to top
Read Time: 12 min

() translation by (you can also view the original English article)

Zunächst möchte ich die offizielle Website von Laravel über Helfer sprechen lassen.

Laravel enthält eine Vielzahl von globalen "Helfer" PHP-Funktionen. Viele dieser Funktionen werden vom Framework selbst verwendet. Sie können diese jedoch in Ihren eigenen Anwendungen verwenden, wenn Sie sie für praktisch halten.

Im Grunde sind Helfer in Laravel eingebaute Dienstprogrammfunktionen, die Sie von überall in Ihrer Anwendung aufrufen können. Wenn sie nicht vom Kernframework bereitgestellt worden wären, hätten Sie möglicherweise eigene Hilfsklassen entwickelt.

Obwohl der Kern bereits eine Vielzahl von Helfern zur Verfügung stellt, gibt es immer die Möglichkeit, dass Sie Ihre eigenen benötigen und eine entwickeln möchten, so dass Sie nicht den gleichen Code hier und da wiederholen müssen, um eine bessere Wartbarkeit zu erreichen. In diesem Tutorial erfahren Sie, wie Sie einen benutzerdefinierten Laravel-Helfer erstellen.

Helfer in Laravel

Wie bereits erwähnt, gibt es im Kern des Laravel-Frameworks viele Helfer. Sie werden basierend auf der Funktionalität gruppiert, die sie bereitstellen. Hier ist eine Liste von Hilfsgruppen.

Arrays

Helfer in dieser Gruppe bieten Funktionen zum Bearbeiten von Array-Elementen. In den meisten Fällen möchten Sie verschiedene Operationen für Array-Elemente ausführen. Dies ist der Ort, an dem Sie zuerst nachsehen sollten, ob das, wonach Sie suchen, bereits existiert.

Pfade

Ich finde Helfer in dieser Kategorie am nützlichsten. Sie geben den vollständig qualifizierten Pfad verschiedener Verzeichnisse wie App, Storage, Config und dergleichen zurück. Ich wette, Sie verwenden die meisten dieser Helfer bereits in Ihrer Laravel-Anwendung.

Saiten

String-Manipulation ist in Ihrer täglichen Anwendungsentwicklung unvermeidlich. Obwohl es viele String-Manipulationsfunktionen gibt, die von PHP selbst bereitgestellt werden, finden Sie in diesem Abschnitt einige nützliche Funktionen.

URLs

Sie finden nur sehr wenige in dieser Kategorie, aber sie werden in der gesamten Anwendung verwendet. Sie werden zum Generieren von URLs für Route, Asset und Formular verwendet.

Sonstiges

Diese Kategorie enthält Helfer, die eine Vielzahl von Funktionalitäten bieten, von der Protokollierung bis zur Fehlersuche und vielem mehr.

Für eine vollständige Referenz von Laravel-Helfern gibt es keinen besseren Ort als die offizielle Dokumentation.

Erstellen Sie Ihren ersten benutzerdefinierten Helper

Jetzt haben Sie ein grundlegendes Verständnis von Laravel Helfern und wofür sie verwendet werden. In diesem Abschnitt zeige ich Ihnen, wie Sie Ihren eigenen benutzerdefinierten Helper erstellen können, der global in Ihrer Laravel-Anwendung verwendet werden kann.

Um die Dinge einfach und leicht verständlich zu halten, ist es ein ziemlich einfacher Helfer, der eine Benutzer-ID akzeptiert und einen Benutzernamen als Antwort zurückgibt. Das hört sich natürlich nicht schick an, aber ich glaube, es genügt, das Konzept zu demonstrieren, und Sie können es immer erweitern, um Ihre komplexen Anforderungen zu erfüllen.

Ich nehme an, dass Sie eine Benutzertabelle in Ihrer Datenbank haben und es mindestens zwei Felder-userid und username hat.

Das Skelett eines Laravel Helfers

Bevor wir fortfahren und die Dateien tatsächlich erstellen, werfen wir einen kurzen Blick auf die Dateien, die wir im Rest des Artikels erstellen werden.

  • app/Helpers/Envato/User.php: Es ist unsere Hilfsdatei, die die Logik unseres Helfers enthält.
  • app/Providers/EnvatoServiceProvider.php: Es ist eine benutzerdefinierte Service-Provider-Datei, die unsere benutzerdefinierte Hilfsdatei lädt.
  • config / app.php: In dieser Datei deklarieren wir unseren benutzerdefinierten Service-Provider und helfen uns auch, einen Alias für unseren Helfer zu definieren, so dass wir nicht den vollständig qualifizierten Klassennamen unseres Helfers verwenden müssen.
  • routes / web.php: Eine hübsche Standard-Laravel-Routendatei, in der wir unseren Helfer testen werden.

Erstellen Sie Hilfsdateien

Obwohl Sie Ihre Hilfsdateien überall in Ihrer Anwendung platzieren können, schlägt die intuitivere und standardmäßige Methode vor, dass sie in Ihrem app-Verzeichnis angezeigt wird.

Also mach weiter und erstelle ein Helpers/Envato-Verzeichnis unter app und erstelle eine User.php-Datei mit folgendem Inhalt. Natürlich könntest du es direkt unter dem app oder app/Helper-Verzeichnis platzieren, aber wenn du dieses zusätzliche Level zur Verfügung stellst, können wir unsere Helfer in guter Form organisieren, speziell wenn du viele davon haben willst.

1
<?php
2
//app/Helpers/Envato/User.php

3
namespace App\Helpers\Envato;
4
5
use Illuminate\Support\Facades\DB;
6
7
class User {
8
    /**

9
     * @param int $user_id User-id

10
     * 

11
     * @return string

12
     */
13
    public static function get_username($user_id) {
14
        $user = DB::table('users')->where('userid', $user_id)->first();
15
        
16
        return (isset($user->username) ? $user->username : '');
17
    }
18
}

Die Datei beginnt mit einer hübschen Standard-Namespace-Deklaration:

1
namespace App\Helpers\Envato;

Der Zweck unseres benutzerdefinierten Helpers ist es, einen Benutzernamen basierend auf einer Benutzer-ID abzurufen. Daher müssen wir mit der Datenbank interagieren, und das zwingt uns, DB Facade einzubeziehen.

1
use Illuminate\Support\Facades\DB;

Für diejenigen, die mit Laravel Facades nicht vertraut sind, ist es nur eine weitere bequeme Möglichkeit, auf die Objekte in Service-Containern zuzugreifen. Alternativ hätten Sie die Abhängigkeitsinjektion verwenden können.

Weiter geht es mit der konkreten Umsetzung unseres Helfers. Wie Sie sehen können, gibt es eine statische Methode, die die Logik zum Abrufen eines Benutzernamens basierend auf einer Benutzer-ID definiert.

1
$user = DB::table('users')->where('userid', $user_id)->first();

Das $user-Objekt enthält den Datenbankdatensatz mit der übereinstimmenden Benutzer-ID. Abschließend gibt die Methode den Benutzernamen als Antwort in der folgenden Anweisung zurück.

1
return (isset($user->username) ? $user->username : '');

Soweit unsere Hilfsdatei betroffen ist.

Jetzt haben wir unsere Hilfsdatei erstellt, aber die Frage ist, wie willst du sie benutzen? Zwei schnelle Lösungen kommen mir in den Sinn:

  • Sie können unseren Helper-Dateinamen in die Datei composer.json aufnehmen, damit er automatisch geladen wird. Dann könnten Sie sofort die statische Methode unserer Helferklasse aufrufen.
  • Sie können einen Laravel-Dienstanbieter erstellen, mit dem Sie Ihre benutzerdefinierte Hilfsdatei so registrieren können, dass das Laravel-Framework sie zusammen mit anderen Abhängigkeiten lädt. Registrieren Sie diesen Dienstanbieter in der Laravel-Konfiguration und erstellen Sie einen Alias, um Ihren Helper zu verwenden.

Natürlich ist die erste ziemlich schnell und einfach zu implementieren, und Sie könnten versucht sein, dies zu tun, aber ich würde eher die letztere empfehlen, da sie eher handwerklich und wartungsfreundlicher ist.

Wechseln Sie zur Befehlszeile und führen Sie den folgenden Befehl in Ihrem Anwendungsstamm aus, um einen neuen Dienstanbieter zu erstellen.

1
$php artisan make:provider EnvatoServiceProvider 
2
Provider created successfully.

Sie sollten die Nachricht sehen, die bestätigt, dass sie erfolgreich im Verzeichnis app/Providers erstellt wurde.

Öffnen Sie diese Datei und Sie sollten bereits zwei Methoden sehen. Der wichtigste im Zusammenhang mit diesem Artikel ist die Methode register. Ja, es ist im Moment leer, also lasst uns ein paar Dinge einspeisen, um es nützlicher zu machen.

1
public function register()
2
{
3
    require_once app_path() . '/Helpers/Envato/User.php';
4
}

Die register-Methode wird verwendet, um Ihre Abhängigkeiten zu registrieren, und genau das haben wir getan. Wir haben unsere benutzerdefinierte Hilfsdatei hinzugefügt.

So sollte die Datei app/Providers/EnvatoServiceProvider.php nach Änderungen aussehen.

1
<?php
2
// app/Providers/EnvatoServiceProvider.php

3
namespace App\Providers;
4
5
use Illuminate\Support\ServiceProvider;
6
7
class EnvatoServiceProvider extends ServiceProvider
8
{
9
    /**

10
     * Bootstrap the application services.

11
     *

12
     * @return void

13
     */
14
    public function boot()
15
    {
16
        //

17
    }
18
19
    /**

20
     * Register the application services.

21
     *

22
     * @return void

23
     */
24
    public function register()
25
    {
26
        require_once app_path() . '/Helpers/Envato/User.php';
27
    }
28
}

Bis jetzt ist alles ziemlich gut. Wir haben unseren kundenspezifischen Helfer und Dienstleister auf dem Tisch.

Als nächstes müssen wir Laravel über unseren Service Provider informieren, damit dieser beim Bootstrapping geladen werden kann. Öffnen wir die Datei config / app.php und fügen Sie am Ende den folgenden Eintrag in das provider-Array ein.

1
App\Providers\EnvatoServiceProvider::class,

Um unseren Helfer auf bequeme Weise zu verwenden, könnten wir auch einen Alias erstellen. Lassen Sie uns das tun, indem Sie den folgenden Eintrag im Array aliases am Ende in derselben Datei hinzufügen.

1
'EnvatoUser' => App\Helpers\Envato\User::class,

Wenn Sie diesen Eintrag definieren, können Sie unseren Helfer mit dem Schlüsselwort EnvatoUser aufrufen. Ziemlich praktisch, nicht wahr? Zu Ihrer Information, hier ist die komplette Datei config / app.php.

1
<?php
2
// config/app.php

3
return [
4
5
    /*

6
    |--------------------------------------------------------------------------

7
    | Application Name

8
    |--------------------------------------------------------------------------

9
    |

10
    | This value is the name of your application. This value is used when the

11
    | framework needs to place the application's name in a notification or

12
    | any other location as required by the application or its packages.

13
    */
14
15
    'name' => 'Laravel',
16
17
    /*

18
    |--------------------------------------------------------------------------

19
    | Application Environment

20
    |--------------------------------------------------------------------------

21
    |

22
    | This value determines the "environment" your application is currently

23
    | running in. This may determine how you prefer to configure various

24
    | services your application utilizes. Set this in your ".env" file.

25
    |

26
    */
27
28
    'env' => env('APP_ENV', 'production'),
29
30
    /*

31
    |--------------------------------------------------------------------------

32
    | Application Debug Mode

33
    |--------------------------------------------------------------------------

34
    |

35
    | When your application is in debug mode, detailed error messages with

36
    | stack traces will be shown on every error that occurs within your

37
    | application. If disabled, a simple generic error page is shown.

38
    |

39
    */
40
41
    'debug' => env('APP_DEBUG', false),
42
43
    /*

44
    |--------------------------------------------------------------------------

45
    | Application URL

46
    |--------------------------------------------------------------------------

47
    |

48
    | This URL is used by the console to properly generate URLs when using

49
    | the Artisan command line tool. You should set this to the root of

50
    | your application so that it is used when running Artisan tasks.

51
    |

52
    */
53
54
    'url' => env('APP_URL', 'https://localhost'),
55
56
    /*

57
    |--------------------------------------------------------------------------

58
    | Application Timezone

59
    |--------------------------------------------------------------------------

60
    |

61
    | Here you may specify the default timezone for your application, which

62
    | will be used by the PHP date and date-time functions. We have gone

63
    | ahead and set this to a sensible default for you out of the box.

64
    |

65
    */
66
67
    'timezone' => 'UTC',
68
69
    /*

70
    |--------------------------------------------------------------------------

71
    | Application Locale Configuration

72
    |--------------------------------------------------------------------------

73
    |

74
    | The application locale determines the default locale that will be used

75
    | by the translation service provider. You are free to set this value

76
    | to any of the locales which will be supported by the application.

77
    |

78
    */
79
80
    'locale' => 'en',
81
82
    /*

83
    |--------------------------------------------------------------------------

84
    | Application Fallback Locale

85
    |--------------------------------------------------------------------------

86
    |

87
    | The fallback locale determines the locale to use when the current one

88
    | is not available. You may change the value to correspond to any of

89
    | the language folders that are provided through your application.

90
    |

91
    */
92
93
    'fallback_locale' => 'en',
94
95
    /*

96
    |--------------------------------------------------------------------------

97
    | Encryption Key

98
    |--------------------------------------------------------------------------

99
    |

100
    | This key is used by the Illuminate encrypter service and should be set

101
    | to a random, 32 character string, otherwise these encrypted strings

102
    | will not be safe. Please do this before deploying an application!

103
    |

104
    */
105
106
    'key' => env('APP_KEY'),
107
108
    'cipher' => 'AES-256-CBC',
109
110
    /*

111
    |--------------------------------------------------------------------------

112
    | Logging Configuration

113
    |--------------------------------------------------------------------------

114
    |

115
    | Here you may configure the log settings for your application. Out of

116
    | the box, Laravel uses the Monolog PHP logging library. This gives

117
    | you a variety of powerful log handlers / formatters to utilize.

118
    |

119
    | Available Settings: "single", "daily", "syslog", "errorlog"

120
    |

121
    */
122
123
    'log' => env('APP_LOG', 'single'),
124
125
    'log_level' => env('APP_LOG_LEVEL', 'debug'),
126
127
    /*

128
    |--------------------------------------------------------------------------

129
    | Autoloaded Service Providers

130
    |--------------------------------------------------------------------------

131
    |

132
    | The service providers listed here will be automatically loaded on the

133
    | request to your application. Feel free to add your own services to

134
    | this array to grant expanded functionality to your applications.

135
    |

136
    */
137
138
    'providers' => [
139
140
        /*

141
         * Laravel Framework Service Providers...

142
         */
143
        Illuminate\Auth\AuthServiceProvider::class,
144
        Illuminate\Broadcasting\BroadcastServiceProvider::class,
145
        Illuminate\Bus\BusServiceProvider::class,
146
        Illuminate\Cache\CacheServiceProvider::class,
147
        Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
148
        Illuminate\Cookie\CookieServiceProvider::class,
149
        Illuminate\Database\DatabaseServiceProvider::class,
150
        Illuminate\Encryption\EncryptionServiceProvider::class,
151
        Illuminate\Filesystem\FilesystemServiceProvider::class,
152
        Illuminate\Foundation\Providers\FoundationServiceProvider::class,
153
        Illuminate\Hashing\HashServiceProvider::class,
154
        Illuminate\Mail\MailServiceProvider::class,
155
        Illuminate\Notifications\NotificationServiceProvider::class,
156
        Illuminate\Pagination\PaginationServiceProvider::class,
157
        Illuminate\Pipeline\PipelineServiceProvider::class,
158
        Illuminate\Queue\QueueServiceProvider::class,
159
        Illuminate\Redis\RedisServiceProvider::class,
160
        Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
161
        Illuminate\Session\SessionServiceProvider::class,
162
        Illuminate\Translation\TranslationServiceProvider::class,
163
        Illuminate\Validation\ValidationServiceProvider::class,
164
        Illuminate\View\ViewServiceProvider::class,
165
166
        /*

167
         * Package Service Providers...

168
         */
169
        Laravel\Tinker\TinkerServiceProvider::class,
170
171
        /*

172
         * Application Service Providers...

173
         */
174
        App\Providers\AppServiceProvider::class,
175
        App\Providers\AuthServiceProvider::class,
176
        // App\Providers\BroadcastServiceProvider::class,

177
        App\Providers\EventServiceProvider::class,
178
        App\Providers\RouteServiceProvider::class,
179
        App\Providers\EnvatoServiceProvider::class,
180
    ],
181
182
    /*

183
    |--------------------------------------------------------------------------

184
    | Class Aliases

185
    |--------------------------------------------------------------------------

186
    |

187
    | This array of class aliases will be registered when this application

188
    | is started. However, feel free to register as many as you wish as

189
    | the aliases are "lazy" loaded so they don't hinder performance.

190
    |

191
    */
192
193
    'aliases' => [
194
195
        'App' => Illuminate\Support\Facades\App::class,
196
        'Artisan' => Illuminate\Support\Facades\Artisan::class,
197
        'Auth' => Illuminate\Support\Facades\Auth::class,
198
        'Blade' => Illuminate\Support\Facades\Blade::class,
199
        'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
200
        'Bus' => Illuminate\Support\Facades\Bus::class,
201
        'Cache' => Illuminate\Support\Facades\Cache::class,
202
        'Config' => Illuminate\Support\Facades\Config::class,
203
        'Cookie' => Illuminate\Support\Facades\Cookie::class,
204
        'Crypt' => Illuminate\Support\Facades\Crypt::class,
205
        'DB' => Illuminate\Support\Facades\DB::class,
206
        'Eloquent' => Illuminate\Database\Eloquent\Model::class,
207
        'Event' => Illuminate\Support\Facades\Event::class,
208
        'File' => Illuminate\Support\Facades\File::class,
209
        'Gate' => Illuminate\Support\Facades\Gate::class,
210
        'Hash' => Illuminate\Support\Facades\Hash::class,
211
        'Lang' => Illuminate\Support\Facades\Lang::class,
212
        'Log' => Illuminate\Support\Facades\Log::class,
213
        'Mail' => Illuminate\Support\Facades\Mail::class,
214
        'Notification' => Illuminate\Support\Facades\Notification::class,
215
        'Password' => Illuminate\Support\Facades\Password::class,
216
        'Queue' => Illuminate\Support\Facades\Queue::class,
217
        'Redirect' => Illuminate\Support\Facades\Redirect::class,
218
        'Redis' => Illuminate\Support\Facades\Redis::class,
219
        'Request' => Illuminate\Support\Facades\Request::class,
220
        'Response' => Illuminate\Support\Facades\Response::class,
221
        'Route' => Illuminate\Support\Facades\Route::class,
222
        'Schema' => Illuminate\Support\Facades\Schema::class,
223
        'Session' => Illuminate\Support\Facades\Session::class,
224
        'Storage' => Illuminate\Support\Facades\Storage::class,
225
        'URL' => Illuminate\Support\Facades\URL::class,
226
        'Validator' => Illuminate\Support\Facades\Validator::class,
227
        'View' => Illuminate\Support\Facades\View::class,
228
        'EnvatoUser' => App\Helpers\Envato\User::class,
229
    ],
230
231
];

Wir sind fast da! Wir haben die ganze harte Arbeit geleistet, um hierher zu kommen, und jetzt können wir die Vorteile unseres benutzerdefinierten Helfers nutzen.

Ihre erste benutzerdefinierte Helfer in Aktion

Um die Dinge einfach und unkompliziert zu halten, definieren wir eine einfache Laravel-Route und rufen von dort aus unseren Helfer an!

Gehen Sie voran und erstellen Sie eine routes/web.php Datei mit folgendem Inhalt.

1
<?php
2
// routes/web.php

3
/*

4
|--------------------------------------------------------------------------

5
| Web Routes

6
|--------------------------------------------------------------------------

7
|

8
| Here is where you can register web routes for your application. These

9
| routes are loaded by the RouteServiceProvider within a group which

10
| contains the "web" middleware group. Now create something great!

11
|

12
*/
13
14
Route::get('/envato-user-helper-demo', function () {
15
    return EnvatoUser::get_username(1);
16
});

Braucht das überhaupt eine Erklärung? Wir haben gerade den benutzerdefinierten Helfer mit der Kurzschrift EnvatoUser::get_username aufgerufen, und er sollte den Benutzernamen zurückgeben.

Natürlich können Sie unseren Helfer von überall in der Anwendung anrufen, sei es ein Controller oder eine Ansicht.

Damit endet unsere Geschichte für heute.

Fazit

Helfer in Laravel sind wirklich ein mächtiges Feature, und ich bin mir sicher, dass Sie als Entwickler das gerne erweitern würden. Und das war das Thema von heute - wir gingen durch die Grundlagen der Laravel-Hilfsdatei-Struktur und erstellten einen nützlichen benutzerdefinierten Helfer.

Ich hoffe, Ihnen hat der Artikel gefallen und er hilft Ihnen bei der Erstellung Ihrer eigenen maßgeschneiderten Helfer in der täglichen Laravel-Anwendungsentwicklung.

Zögern Sie nicht, Ihre Kommentare und Fragen im Feed unten zu hinterlassen. Ich fange auch Kommentare auf meinem Twitter und reagiere auf sie, sobald ich kann!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.