laravel - riptutorial.com · inhaltsverzeichnis Über 1 kapitel 1: erste schritte mit laravel 2...
TRANSCRIPT
Laravel
#laravel
Inhaltsverzeichnis
Über 1
Kapitel 1: Erste Schritte mit Laravel 2
Bemerkungen 2
Laravel StackOverflow Slack Community 2
Vorgestelltes Tutorial 2
Beitragsrichtlinien 2
Beitragsstilhandbuch 2
Über Laravel 2
Haupteigenschaften 2
MVC 2
Schablonen-Engine 3
Routing und Middleware 3
Handwerker 3
Eloquent ORM 3
Handhabung des Events 3
Versionen 3
Examples 4
Willkommen in der Laravel-Tag-Dokumentation! 4
Starterhandbuch 4
Fertig machen 5
Laravel-Ansichten 5
Kapitel 2: Ändern Sie das Standardroutingverhalten in Laravel 5.2.31 + 7
Syntax 7
Parameter 7
Bemerkungen 7
Examples 7
Hinzufügen von API-Routen mit anderer Middleware und Beibehalten der Standard-Web-Middlewa 7
Kapitel 3: Anfragen 9
Examples 9
Eingabe erhalten 9
Kapitel 4: Anfragen 10
Examples 10
Fordern Sie eine Instanz der HTTP-Anforderung an 10
Instanz mit anderen Parametern von Routen in Controller-Methode anfordern 10
Kapitel 5: Aufgabenplanung 12
Examples 12
Eine Aufgabe erstellen 12
Aufgabe zur Verfügung stellen 13
Planen Sie Ihre Aufgabe 14
Festlegen, dass der Scheduler ausgeführt wird 15
Kapitel 6: Aussaat 16
Bemerkungen 16
Examples 16
Daten einfügen 16
DB Facade verwenden 16
Über das Instantiieren eines Modells 16
Verwenden Sie die Create-Methode 16
Mit fabrik 17
&& alte Daten löschen und Auto-Inkrement zurücksetzen 17
Andere Sämaschinen anrufen 17
Seeder anlegen 17
Sichere Nachsaat 18
Kapitel 7: Authentifizierung 20
Examples 20
Multi-Authentifizierung 20
Kapitel 8: Benennen von Dateien beim Hochladen mit Laravel unter Windows 24
Parameter 24
Examples 24
Zeitstempel-Dateinamen für von Benutzern hochgeladene Dateien generieren. 24
Kapitel 9: Benutzerdefinierte Helferfunktion 26
Einführung 26
Bemerkungen 26
Examples 26
document.php 26
HelpersServiceProvider.php 26
Benutzen 27
Kapitel 10: Beobachter 28
Examples 28
Einen Beobachter erstellen 28
Kapitel 11: Berechtigungen für die Speicherung 30
Einführung 30
Examples 30
Beispiel 30
Kapitel 12: Beredt 31
Einführung 31
Bemerkungen 31
Examples 31
Einführung 31
Unterthemen-Navigation 32
Anhalten 32
Löschen 33
Weiches Löschen 34
Primärschlüssel und Zeitstempel ändern 35
Werfen Sie 404, wenn die Entität nicht gefunden wurde 36
Klonen von Modellen 36
Kapitel 13: Blade-Vorlagen 38
Einführung 38
Examples 38
Ansichten: Einführung 38
Kontrollstrukturen 39
Conditionals 39
"If" -Anweisungen 39
"Es sei denn" Aussagen 39
Schleifen 40
'While-Schleife 40
Foreach-Schleife 40
"Forelse" -Schleife 40
Echo von PHP-Ausdrücken 41
Eine Variable wiederholen 41
Echo eines Elements in einem Array 42
Echo einer Objekteigenschaft 42
Das Ergebnis eines Funktionsaufrufs wiederholen 42
Existenz prüfen 42
Rohe Echos 42
Einschließlich Teilansichten 43
Vererbung des Layouts 44
Daten für alle Ansichten freigeben 45
View :: share verwenden 45
View :: composer verwenden 45
Closure-basierter Komponist 45
Klassenbasierter Komponist 46
Beliebigen PHP-Code ausführen 46
Kapitel 14: Controller 48
Einführung 48
Examples 48
Grundsteuerungen 48
Controller-Middleware 48
Ressourcencontroller 49
Beispiel für einen Resource Controller 49
Vom Ressourcen-Controller gehandhabte Aktionen 51
Kapitel 15: Cron-Grundlagen 52
Einführung 52
Examples 52
Cron-Job erstellen 52
Kapitel 16: CustomException-Klasse in Laravel 53
Einführung 53
Examples 53
CustomException-Klasse in Laravel 53
Kapitel 17: Dateisystem / Cloud-Speicher 55
Examples 55
Aufbau 55
Grundlegende Verwendung 55
Benutzerdefinierte Dateisysteme 57
Erstellen eines symbolischen Links in einem Webserver mit SSH 58
Kapitel 18: Datenbank 59
Examples 59
Mehrere Datenbankverbindungen 59
Kapitel 19: Datenbank Seeding 63
Examples 63
Seeder ausführen 63
Einen Samen erstellen 63
Daten mit einem Seeder einfügen 63
Einfügen von Daten mit einer Modellfabrik 64
Seeding mit MySQL Dump 64
Verwenden von Faker und ModelFactories zum Generieren von Seeds 65
Kapitel 20: Datenbankmigrationen 68
Examples 68
Migrationen 68
Die Migrationsdateien 69
Migrationsdateien generieren 69
Innerhalb einer Datenbankmigration 70
Migrationen ausführen 71
Migrationen rückgängig machen 71
Kapitel 21: Dienstleistungen 73
Examples 73
Einführung 73
Kapitel 22: Dienstleistungen 78
Examples 78
Binden einer Schnittstelle an die Implementierung 78
Instanz binden 78
Binden eines Singleton an den Service-Container 78
Einführung 79
Verwenden des Service-Containers als Abhängigkeitsinjektionscontainer 79
Kapitel 23: Domainübergreifende Anfrage 80
Examples 80
Einführung 80
CorsHeaders 80
Kapitel 24: Einführung in Laravel-5.2 82
Einführung 82
Bemerkungen 82
Examples 82
Installation oder Setup 82
Installieren Sie das Laravel 5.1 Framework auf Ubuntu 16.04, 14.04 und LinuxMint 82
Kapitel 25: Einführung in Laravel-5.3 86
Einführung 86
Examples 86
Die Variable $ loop 86
Kapitel 26: Eloquent: Accessors & Mutators 87
Einführung 87
Syntax 87
Examples 87
Definieren eines Accessors 87
Accessor bekommen: 87
Mutator definieren 88
Kapitel 27: Eloquent: Beziehung 89
Examples 89
Fragen zu Beziehungen abfragen 89
Verwandte Modelle einfügen 89
Einführung 90
Beziehungstypen 90
Eins zu vielen 90
Eins zu eins 91
Zuordnung zwischen zwei Modellen (Beispiel: User und Phone ) 91
Erläuterung 92
Viel zu viel 92
Polymorph 93
Viel zu viel 95
Kapitel 28: Eloquent: Modell 98
Examples 98
Ein Modell erstellen 98
Modellerstellung 98
Speicherort der Modelldatei 99
Modellkonfiguration 100
Aktualisieren Sie ein vorhandenes Modell 101
Kapitel 29: Entfernen Sie public von URL in Laravel 102
Einführung 102
Examples 102
Wie geht das? 102
Entfernen Sie die Öffentlichkeit aus der URL 102
Kapitel 30: Erste Schritte mit Laravel-5.3 103
Bemerkungen 103
Examples 103
Laravel installieren 103
Über den Laravel Installer 103
Über Composer Create-Project 104
Konfiguration 104
Serveranforderungen 104
Lokaler Entwicklungsserver 105
Hallo Weltbeispiel (Basic) und mit einer Ansicht 105
Hallo Weltbeispiel (Basic) 106
Webserver-Konfiguration für hübsche URLs 107
Kapitel 31: Fehlerbehandlung 108
Bemerkungen 108
Examples 108
Fehlerbericht-E-Mail senden 108
Anwendungsweite ModelNotFoundException abfangen 109
Kapitel 32: Formularanforderung (en) 110
Einführung 110
Syntax 110
Bemerkungen 110
Examples 110
Anfragen erstellen 110
Formularanforderung verwenden 110
Umleitungen nach der Validierung behandeln 111
Kapitel 33: Genehmigung 113
Einführung 113
Examples 113
Gates verwenden 113
Aktionen mit Gates autorisieren 113
Richtlinien 114
Richtlinien schreiben 114
Aktionen mit Richtlinien autorisieren 114
Kapitel 34: Handwerker 116
Syntax 116
Parameter 116
Examples 118
Einführung 118
Listet alle registrierten Routen auf, die mit mehreren Methoden gefiltert wurden 119
Ausführen von Laravel Artisan-Befehlen mit PHP-Code 119
Neuen handwerklichen Befehl erstellen und registrieren 119
Kapitel 35: Häufige Probleme und schnelle Korrekturen 121
Einführung 121
Examples 121
TokenMisMatch-Ausnahme 121
Kapitel 36: Helfer 122
Einführung 122
Examples 122
Array-Methoden 122
String-Methoden 122
Pfad mehods 122
URLs 123
Kapitel 37: HTML und Form Builder 124
Examples 124
Installation 124
Kapitel 38: Installation 125
Examples 125
Installation 125
Über den Komponisten 125
Über den Laravel Installer 125
Anwendung ausführen 126
Verwendung eines anderen Servers 126
Bedarf 127
Hello World-Beispiel (Verwenden von Controller und View) 128
Hallo Weltbeispiel (Basic) 129
Installation mit LaraDock (Laravel Homestead für Docker) 130
Installation 130
Grundlegende Verwendung 130
Kapitel 39: Installationsanleitung 132
Bemerkungen 132
Examples 132
Installation 132
Hallo Weltbeispiel (Basic) 133
Hallo Weltbeispiel mit Ansichten und Controller 133
Die Aussicht 133
Der Controller 133
Der Router 134
Kapitel 40: Kammerdiener 135
Einführung 135
Syntax 135
Parameter 135
Bemerkungen 135
Examples 135
Valet-Link 135
Parkservice 136
Valet-Links 136
Installation 136
Valet Domain 137
Installation (Linux) 137
Kapitel 41: Kassierer 139
Bemerkungen 139
Examples 139
Streifen-Setup 139
Kapitel 42: Konstanten 141
Examples 141
Beispiel 141
Kapitel 43: Laravel Docker 142
Einführung 142
Examples 142
Laradock verwenden 142
Kapitel 44: Laravel-Pakete 143
Examples 143
Laravel-Ide-Helfer 143
Laravel-Datentabellen 143
Interventions-Bild 143
Laravel-Generator 143
Laravel Socialite 143
Offizielle Pakete 143
Kassierer 143
Gesandte 144
Reisepass 144
Erkunden 144
Prominente 144
Kapitel 45: Lumen-Rahmen 146
Examples 146
Erste Schritte mit Lumen 146
Kapitel 46: Mail 147
Examples 147
Grundlegendes Beispiel 147
Kapitel 47: Makros in einer eloquenten Beziehung 148
Einführung 148
Examples 148
Wir können eine Instanz der hasMany-Beziehung abrufen 148
Kapitel 48: Mehrere DB-Verbindungen in Laravel 149
Examples 149
Erste Schritte 149
Schema Builder verwenden 149
DB Query Builder verwenden 150
Eloquent verwenden 150
Aus der Laravel-Dokumentation 150
Kapitel 49: Middleware 152
Einführung 152
Bemerkungen 152
Examples 152
Middleware definieren 152
Vorher nach After Middleware 153
Routen-Middleware 153
Kapitel 50: Nützliche Links 155
Einführung 155
Examples 155
Laravel Ökosystem 155
Bildung 155
Podcasts 155
Kapitel 51: Prominente 157
Examples 157
Installation 157
Aufbau 157
Grundnutzung - Fassade 157
Grundnutzung - Abhängigkeitsinjektion 158
Socialite für API - Stateless 158
Kapitel 52: Richtlinien 160
Examples 160
Richtlinien erstellen 160
Kapitel 53: Routenmodellbindung 161
Examples 161
Implizite Bindung 161
Explizite Bindung 161
Kapitel 54: Routing 163
Examples 163
Grundlegendes Routing 163
Routen, die auf eine Controller-Methode zeigen 163
Eine Route für mehrere Verben 163
Routengruppen 164
Benannte Route 164
URL mit benannter Route generieren 164
Routenparameter 165
Optionaler Parameter 165
Erforderlicher Parameter 165
Zugriff auf den Parameter in der Steuerung 165
Fange alle Strecken 166
Alle Routen abfangen, außer bereits definiert 166
Routen werden in der Reihenfolge abgeglichen, in der sie deklariert sind 166
Routen ohne Berücksichtigung der Groß- und Kleinschreibung 166
Kapitel 55: Sammlungen 168
Syntax 168
Bemerkungen 168
Examples 168
Sammlungen erstellen 168
woher() 168
Verschachtelung 169
Ergänzungen 169
Verwenden von Get zum Nachschlagen von Werten oder zum Rücksetzen des Standardwerts 169
Verwenden von Enthält, um zu überprüfen, ob eine Sammlung bestimmte Bedingungen erfüllt 170
Verwenden von Pluck, um bestimmte Werte aus einer Sammlung zu extrahieren 170
Mit Map können Sie jedes Element in einer Sammlung bearbeiten 171
Verwenden Sie sum, avg, min oder max für eine Sammlung für statistische Berechnungen 171
Eine Sammlung sortieren 172
Sortieren() 172
Sortiere nach() 172
SortByDesc () 173
Verwenden Sie reduzieren () 173
Verwenden von macro () zum Erweitern von Sammlungen 175
Verwenden der Array-Syntax 175
Kapitel 56: Seitennummerierung 177
Examples 177
Paginierung in Laravel 177
Ändern der Seitenumbrüche 178
Kapitel 57: Sparkpost-Integration mit Laravel 5.4 180
Einführung 180
Examples 180
Beispieldaten für die .env-Datei 180
Kapitel 58: Stellen Sie die Laravel 5-App auf Shared Hosting unter Linux Server bereit 181
Bemerkungen 181
Examples 181
Laravel 5 App für Shared Hosting auf Linux Server 181
Kapitel 59: Testen 184
Examples 184
Einführung 184
Testen Sie ohne Middleware und mit einer frischen Datenbank 184
Datenbanktransaktionen für mehrere Datenbankverbindungen 185
Testen der Einrichtung unter Verwendung der Speicherdatenbank 185
Aufbau 186
Kapitel 60: Token Mismatch Error in AJAX 187
Einführung 187
Examples 187
Setup-Token im Header 187
Token aktivieren Etikett 187
Überprüfen Sie den Speicherpfad und die Berechtigung für die Sitzung 187
Verwenden Sie das Feld _token für Ajax 188
Kapitel 61: Validierung 189
Parameter 189
Examples 190
Basisbeispiel 190
Array-Überprüfung 191
Andere Validierungsansätze 192
Einzelformular-Anforderungsklasse für POST, PUT, PATCH 194
Fehlermeldungen 195
Anpassen von Fehlermeldungen 195
Anpassen von Fehlermeldungen innerhalb einer Request-Klasse 196
Fehlermeldungen anzeigen 197
Benutzerdefinierte Validierungsregeln 197
Kapitel 62: Veranstaltungen und Zuhörer 199
Examples 199
Verwenden von Ereignissen und Listenern zum Senden von E-Mails an einen neuen registrierte 199
Kapitel 63: Verwenden Sie Feldnamen in Eloquent 201
Kapitel 64: Verzeichnisaufbau 202
Examples 202
Ändern Sie das Standard-App-Verzeichnis 202
Anwendungsklasse überschreiben 202
Die neue Klasse aufrufen 202
Komponist 203
Ändern Sie das Controllerverzeichnis 203
Kapitel 65: Warteschlangen 204
Einführung 204
Examples 204
Anwendungsfälle 204
Warteschlangentreiberkonfiguration 204
sync 204
database 204
sqs 205
iron 205
redis 205
beanstalkd 205
null 205
Credits 206
Über
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version from: laravel
It is an unofficial and free Laravel ebook created for educational purposes. All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official Laravel.
The content is released under Creative Commons BY-SA, and the list of contributors to each chapter are provided in the credits section at the end of this book. Images may be copyright of their respective owners unless otherwise specified. All trademarks and registered trademarks are the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor accurate, please send your feedback and corrections to [email protected]
https://riptutorial.com/de/home 1
Kapitel 1: Erste Schritte mit Laravel
Bemerkungen
Laravel StackOverflow Slack Community
Demnächst
Vorgestelltes Tutorial
Erste Schritte mit Laravel
Beitragsrichtlinien
Demnächst
Beitragsstilhandbuch
Demnächst
Über Laravel
Laravel wurde von Taylor Otwell als kostenloses Open-Source- PHP- Webframework entwickelt und soll den Entwicklungsprozess von Webanwendungen vereinfachen und beschleunigen.
Er folgt dem Modell-View-Controller-Modell ( MVC ) sowie dem Kodierungsstandard PSR-2 und dem Autoloading-Standard PSR-4 .
Das Ausführen einer Test Driven Development ( TDD ) in Laravel macht Spaß und ist einfach zu implementieren.
Hosted on GitHub und verfügbar auf https://github.com/laravel/laravel , bietet Laravel einer Mikro-Dienste - Architektur, es enorm erweiterbar und dies macht, mit Leichtigkeit, mit der Verwendung von maßgeschneiderten und oder bestehenden Dritt Pakete.
Haupteigenschaften
MVC
https://riptutorial.com/de/home 2
Laravel verwendet das MVC-Modell, daher gibt es drei Kernkomponenten des Frameworks, die zusammenarbeiten: Modelle, Ansichten und Controller. Controller sind der Hauptteil, an dem die meiste Arbeit erledigt wird. Sie stellen eine Verbindung zu Modellen her, um Daten abzurufen, zu erstellen oder zu aktualisieren und die Ergebnisse in Ansichten anzuzeigen, die die tatsächliche HTML-Struktur der Anwendung enthalten.
Schablonen-Engine
Laravel wird mit einer als Blade bekannten Templating Engine ausgeliefert. Blade ist recht einfach zu bedienen und dennoch leistungsstark. Eine Funktion, die die Blade-Templating-Engine nicht mit anderen beliebten teilt, ist ihre Freizügigkeit. Ermöglicht die Verwendung von normalem PHP-Code in Blade-Templatordateien.
Es ist wichtig anzumerken, dass Blade-Template-Engine-Dateien .blade direkt vor der üblichen .php Datei an die .blade angehängt wurden. .php ist nichts anderes als die eigentliche Dateierweiterung. Daher ist .blade.php die resultierende Dateierweiterung für Blade-Vorlagendateien. Blade-Vorlagen-Engine-Dateien werden im Verzeichnis resources / views gespeichert.
Routing und Middleware
Sie können die URLs Ihrer Anwendung mithilfe von Routen definieren. Diese Routen können variable Daten enthalten, sich mit Controllern verbinden oder in Middlewares eingeschlossen werden. Middelware ist ein Mechanismus zum Filtern von HTTP-Anforderungen. Sie können verwendet werden, um mit Anforderungen zu interagieren, bevor sie die Controller erreichen, und können somit Anforderungen ändern oder ablehnen.
Handwerker
Artisan ist das Befehlszeilenwerkzeug, mit dem Sie Teile von Laravel steuern können. Es gibt eine Vielzahl von Befehlen, um Modelle, Controller und andere für die Entwicklung benötigte Ressourcen zu erstellen. Sie können auch eigene Befehle schreiben, um das Artisan-Befehlszeilentool zu erweitern.
Eloquent ORM
Um Ihre Modelle mit verschiedenen Arten von Datenbanken zu verbinden, bietet Laravel ein eigenes ORM mit einer Vielzahl von Funktionen, mit denen Sie arbeiten können. Das Framework bietet auch Migration und Seeding sowie Rollbacks.
Handhabung des Events
Das Framework kann Ereignisse in der gesamten Anwendung verarbeiten. Sie können Ereignis-Listener und Ereignishandler erstellen, die denen von NodeJs ähneln.
Versionen
https://riptutorial.com/de/home 3
Ausführung Veröffentlichungsdatum
1,0 2011-06-09
2,0 2011-11-24
3,0 2012-02-22
3.1 2012-03-27
3.2 2012-05-22
4,0 2013-05-28
4.1 2013-12-12
4.2 2014-06-01
5,0 2015-02-04
5,1 (LTS) 2015-06-09
5.2 2015-12-21
5.3 2016-08-24
5.4 2017-01-24
Examples
Willkommen in der Laravel-Tag-Dokumentation!
Laravel ist ein bekanntes PHP-Framework. Hier erfahren Sie alles über Laravel. Angefangen von einfach zu wissen, was objektorientierte Programmierung ist, bis zum fortgeschrittenen Laravel-Paketentwicklungsthema.
Wie bei jedem anderen Stackoverflow-Dokumentations-Tag handelt es sich um eine von der Community betriebene Dokumentation. Wenn Sie bereits Erfahrungen mit Laravel gesammelt haben, teilen Sie Ihr Wissen mit eigenen Themen oder Beispielen! Vergessen Sie nicht, unseren Beitragsstil-Leitfaden zu diesem Thema zu lesen, um mehr über den Beitrag und den von uns erstellten Stilführer zu erfahren, um sicherzustellen, dass wir den Menschen, die mehr über Laravel erfahren möchten, die beste Erfahrung bieten.
Mehr als das, wir sind sehr froh, dass Sie kommen und hoffen, dass wir Sie oft hier sehen können!
Starterhandbuch
Das Starterhandbuch ist eine benutzerdefinierte Navigation, die wir selbst bestellt haben, um das Durchsuchen von Themen für Anfänger zu erleichtern. Diese Navigation ist nach
https://riptutorial.com/de/home 4
Schwierigkeitsgrad sortiert.
Fertig machen
Installation
Laravel-Ansichten
Blade: Einführung
Blade: Variablen und Kontrollstrukturen
Oder
Installation von hier aus
Holen Sie sich den Komponisten von hier und installieren Sie ihn1.
Holen Sie sich Wamp von hier aus , installieren Sie es und setzen Sie die Umgebungsvariable von PHP
2.
Holen Sie sich den Pfad zu www und geben Sie den Befehl ein:3.
composer create-project --prefer-dist laravel/laravel projectname
Um eine bestimmte Laravel-Version zu installieren, rufen Sie den Pfad zu www und geben Sie folgenden Befehl ein:
composer create-project --prefer-dist laravel/laravel=DESIRED_VERSION projectname
Oder
Über den Laravel Installer
Laden Sie zunächst das Laravel-Installationsprogramm mit Composer herunter:
composer global require "laravel/installer"
$HOME/.composer/vendor/bin Sie sicher, dass das $HOME/.composer/vendor/bin (oder das entsprechende Verzeichnis für Ihr Betriebssystem) in $ PATH laravel ist, damit die laravel Datei von laravel von Ihrem System gefunden werden kann.
Nach der Installation erstellt der laravel new Befehl laravel new eine neue Laravel-Installation in dem von Ihnen angegebenen Verzeichnis. Zum Beispiel laravel new blog von Laravel ein Verzeichnis mit dem Namen blog das eine neue Laravel-Installation mit allen bereits installierten Abhängigkeiten von Laravel enthält:
laravel new blog
https://riptutorial.com/de/home 5
Erste Schritte mit Laravel online lesen: https://riptutorial.com/de/laravel/topic/794/erste-schritte-mit-laravel
https://riptutorial.com/de/home 6
Kapitel 2: Ändern Sie das Standardroutingverhalten in Laravel 5.2.31 +
Syntax
public function map (Router $ router) // Definieren Sie die Routen für die Anwendung.•geschützte Funktion mapWebRoutes (Router $ router) // Definieren Sie die "Web" -Routen für die Anwendung.
•
Parameter
Parameter Header
Router $ router \ Illuminate \ Routing \ Router $ router
Bemerkungen
Middleware bedeutet, dass jeder Anruf auf einer Route die Middleware durchläuft, bevor er den routenspezifischen Code trifft. In Laravel wird die Web-Middleware verwendet, um beispielsweise die Sitzungsbehandlung oder die Überprüfung des csrf-Tokens sicherzustellen.
Es gibt standardmäßig auch andere Middlewares wie auth oder api. Sie können auch leicht Ihre eigene Middleware erstellen.
Examples
Hinzufügen von API-Routen mit anderer Middleware und Beibehalten der Standard-Web-Middleware
Seit der Laravel-Version 5.2.31 wird die Web-Middleware standardmäßig innerhalb des RouteServiceProvider angewendet ( https://github.com/laravel/laravel/commit/5c30c98db96459b4cc878d085490e4677b0b67ed).
In App / Providers / RouteServiceProvider.php finden Sie die folgenden Funktionen, die die Middleware auf jeder Route in Ihrer App / Http / routes.php anwenden
public function map(Router $router) { $this->mapWebRoutes($router); } // ... protected function mapWebRoutes(Router $router)
https://riptutorial.com/de/home 7
{ $router->group([ 'namespace' => $this->namespace, 'middleware' => 'web', ], function ($router) { require app_path('Http/routes.php'); }); }
Wie Sie sehen, wird das Middleware- Web angewendet. Sie könnten das hier ändern. Sie können jedoch auch problemlos einen weiteren Eintrag hinzufügen, um Ihre API-Routen beispielsweise in eine andere Datei (z. B. routes-api.php) zu kopieren.
public function map(Router $router) { $this->mapWebRoutes($router); $this->mapApiRoutes($router); } protected function mapWebRoutes(Router $router) { $router->group([ 'namespace' => $this->namespace, 'middleware' => 'web', ], function ($router) { require app_path('Http/routes.php'); }); } protected function mapApiRoutes(Router $router) { $router->group([ 'namespace' => $this->namespace, 'middleware' => 'api', ], function ($router) { require app_path('Http/routes-api.php'); }); }
Mit diesem können Sie Ihre API-Routen leicht von Ihren Anwendungsrouten trennen, ohne den chaotischen Gruppen-Wrapper in Ihrer route.php
Ändern Sie das Standardroutingverhalten in Laravel 5.2.31 + online lesen: https://riptutorial.com/de/laravel/topic/4285/andern-sie-das-standardroutingverhalten-in-laravel-5-2-31-plus
https://riptutorial.com/de/home 8
Kapitel 3: Anfragen
Examples
Eingabe erhalten
Die Eingabe der Illuminate\Http\Request in den Controller erfolgt in erster Linie durch Eingabe. Danach gibt es zahlreiche Möglichkeiten, auf die Daten zuzugreifen. 4 davon sind im folgenden Beispiel aufgeführt.
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { public function store(Request $request) { // Returns the username value $name = $request->input('username'); // Returns the username value $name = $request->username; // Returns the username value $name = request('username'); // Returns the username value again $name = request()->username; } }
Bei Verwendung der input kann auch ein Standardwert hinzugefügt werden, wenn die Anforderungseingabe nicht verfügbar ist
$name = $request->input('username', 'John Doe');
Anfragen online lesen: https://riptutorial.com/de/laravel/topic/3076/anfragen
https://riptutorial.com/de/home 9
Kapitel 4: Anfragen
Examples
Fordern Sie eine Instanz der HTTP-Anforderung an
Um eine Instanz einer HTTP-Anforderung zu erhalten, muss die Klasse Illuminate\Http\Request entweder im Konstruktor oder in der Methode des Controllers als Typhinweis angegeben werden.
Beispielcode:
<?php namespace App\Http\Controllers; /* Here how we illuminate the request class in controller */ use Illuminate\Http\Request; use Illuminate\Routing\Controller; class PostController extends Controller { /** * Store a new post. * * @param Request $request * @return Response */ public function store(Request $request) { $name = $request->input('post_title'); /* * so typecasting Request class in our method like above avails the * HTTP GET/POST/PUT etc method params in the controller to use and * manipulate */ } }
Instanz mit anderen Parametern von Routen in Controller-Methode anfordern
Manchmal müssen wir Routenparameter akzeptieren sowie auf die HTTP-Anfrageparameter zugreifen. Wir können immer noch die Klasse "Requests" in den Laravel-Controller eingeben und dies wie unten beschrieben erreichen
ZB haben wir eine Route, die einen bestimmten Post so aktualisiert (Pass ID i Route)
Route::put('post/{id}', 'PostController@update');
Auch da Benutzer andere Bearbeitungsformularfelder bearbeitet haben, stehen diese in HTTP
https://riptutorial.com/de/home 10
Request zur Verfügung
So können Sie in unserer Methode auf beide zugreifen
public function update(Request $request,$id){ //This way we have $id param from route and $request as an HTTP Request object }
Anfragen online lesen: https://riptutorial.com/de/laravel/topic/4929/anfragen
https://riptutorial.com/de/home 11
Kapitel 5: Aufgabenplanung
Examples
Eine Aufgabe erstellen
Sie können mit Artisan eine Aufgabe (Konsolenbefehl) in Laravel erstellen. Von Ihrer Befehlszeile aus:
php artisan make:console MyTaskName
Dadurch wird die Datei in app / Console / Commands / MyTaskName.php erstellt . Es wird so aussehen:
<?php namespace App\Console\Commands; use Illuminate\Console\Command; class MyTaskName extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'command:name'; /** * The console command description. * * @var string */ protected $description = 'Command description'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { //
https://riptutorial.com/de/home 12
} }
Einige wichtige Teile dieser Definition sind:
Die $signature -Eigenschaft kennzeichnet Ihren Befehl. Sie können diesen Befehl später über die Befehlszeile mit Artisan ausführen, indem Sie den Befehl php artisan command:name ausführen php artisan command:name (wobei command:name mit der $signature Ihres Befehls übereinstimmt).
•
Die $description Eigenschaft wird in Artisans Hilfe / Verwendung neben Ihrem Befehl angezeigt, wenn er verfügbar ist.
•
In der handle() -Methode schreiben Sie den Code für Ihren Befehl.•
Schließlich wird Ihre Aufgabe über Artisan der Befehlszeile zur Verfügung gestellt. Die protected $signature = 'command:name'; Diese Eigenschaft ist die Eigenschaft, die Sie zum Ausführen der Klasse verwenden würden.
Aufgabe zur Verfügung stellen
Sie können Artisan und Ihrer Anwendung eine Aufgabe in der Datei app / Console / Kernel.php zur Verfügung stellen .
Die Kernel Klasse enthält ein Array namens $commands das Ihre Befehle für Ihre Anwendung verfügbar macht.
Fügen Sie Ihrem Array Ihren Befehl hinzu, um ihn Artisan und Ihrer Anwendung zur Verfügung zu stellen.
<?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ Commands\Inspire::class, Commands\MyTaskName::class // This line makes MyTaskName available ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule)
https://riptutorial.com/de/home 13
{ } }
Sobald dies geschehen ist, können Sie jetzt über Artisan auf die Befehlszeile zugreifen. Wenn Sie davon ausgehen, dass für den Befehl die $signature -Eigenschaft auf my:task , können Sie den folgenden Befehl ausführen, um Ihre Task auszuführen:
php artisan my:task
Planen Sie Ihre Aufgabe
Wenn Ihr Befehl Ihrer Anwendung zur Verfügung gestellt wird, können Sie mit Laravel die Ausführung in vordefinierten Intervallen planen, genau wie bei einem CRON.
In der Datei app / Console / Kernel.php finden Sie eine schedule , mit der Sie Ihre Aufgabe planen können.
<?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ Commands\Inspire::class, Commands\MyTaskName::class ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { $schedule->command('my:task')->everyMinute(); // $schedule->command('my:task')->everyFiveMinutes(); // $schedule->command('my:task')->daily(); // $schedule->command('my:task')->monthly(); // $schedule->command('my:task')->sundays(); } }
Angenommen, die $signature -Unterschrift Ihrer Aufgabe ist my:task Sie können sie wie oben
https://riptutorial.com/de/home 14
gezeigt mit dem Schedule $schedule Objekt Schedule $schedule . Laravel bietet eine Vielzahl von Möglichkeiten, Ihren Befehl zu planen, wie in den kommentierten Zeilen oben gezeigt.
Festlegen, dass der Scheduler ausgeführt wird
Der Scheduler kann mit dem folgenden Befehl ausgeführt werden:
php artisan schedule:run
Der Scheduler muss jede Minute ausgeführt werden, um korrekt zu funktionieren. Sie können dies einrichten, indem Sie einen cron-Job mit der folgenden Zeile erstellen, in der der Scheduler jede Minute im Hintergrund ausgeführt wird.
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
Aufgabenplanung online lesen: https://riptutorial.com/de/laravel/topic/4026/aufgabenplanung
https://riptutorial.com/de/home 15
Kapitel 6: Aussaat
Bemerkungen
Durch das Seeding von Datenbanken können Sie Daten und allgemeine Testdaten in Ihre Datenbank einfügen. Standardmäßig gibt es eine DatabaseSeeder Klasse unter database/seeds .
Sämaschinen können mit ausgeführt werden
php artisan db:seed
Oder wenn Sie nur eine Klasse bearbeiten möchten
php artisan db:seed --class=TestSeederClass
Wie bei allen handwerklichen Befehlen haben Sie Zugriff auf eine Vielzahl von Methoden, die Sie in der API-Dokumentation finden
Examples
Daten einfügen
Es gibt verschiedene Möglichkeiten, Daten einzufügen:
DB Facade verwenden
public function run() { DB::table('users') ->insert([ 'name' => 'Taylor', 'age' => 21 ]); }
Über das Instantiieren eines Modells
public function run() { $user = new User; $user->name = 'Taylor'; $user->save(); }
Verwenden Sie die Create-Methode
https://riptutorial.com/de/home 16
public function run() { User::create([ 'name' => 'Taylor', 'age' => 21 ]); }
Mit fabrik
public function run() { factory(App\User::class, 10)->create(); }
&& alte Daten löschen und Auto-Inkrement zurücksetzen
public function run() { DB::table('users')->delete(); DB::unprepared('ALTER TABLE users AUTO_INCREMENT=1;'); factory(App\User::class, 200)->create(); }
Weitere Informationen zum Einfügen / Aktualisieren von Daten finden Sie im Beispiel für persistent .
Andere Sämaschinen anrufen
Innerhalb Ihrer DatabaseSeeder Klasse können Sie andere Sämaschinen aufrufen
$this->call(TestSeeder::class)
Auf diese Weise können Sie eine Datei aufbewahren, in der Sie Ihre Sämaschinen leicht finden können. Beachten Sie, dass Sie die Reihenfolge Ihrer Anrufe in Bezug auf Fremdschlüsseleinschränkungen beachten müssen. Sie können nicht auf eine Tabelle verweisen, die noch nicht existiert.
Seeder anlegen
Zum Erstellen von Sämaschinen können Sie den Befehl make:seeder Artisan verwenden. Alle generierten Setzer werden im database/seeds Verzeichnis abgelegt.
$ php artisan make:seeder MoviesTableSeeder
Erzeugte Seeders enthalten eine Methode: run . Sie können mit dieser Methode Daten in Ihre Datenbank einfügen.
https://riptutorial.com/de/home 17
<?php use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; class MoviesTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { App\Movie::create([ 'name' => 'A New Hope', 'year' => '1977' ]); App\Movie::create([ 'name' => 'The Empire Strikes Back', 'year' => '1980' ]); } }
Im Allgemeinen möchten Sie alle Sämaschinen innerhalb der DatabaseSeeder Klasse aufrufen.
Wenn Sie mit dem Schreiben der Sämaschinen fertig sind, verwenden Sie den Befehl db:seed . Dadurch wird die run Funktion von DatabaseSeeder run .
$ php artisan db:seed
Sie können auch angeben, dass eine bestimmte Seeder-Klasse mit der Option --class einzeln ausgeführt werden --class .
$ php artisan db:seed --class=UserSeeder
Wenn Sie alle Migrationen rückgängig machen und erneut ausführen möchten, und dann erneut starten:
$ php artisan migrate:refresh --seed
Der Befehl migrate:refresh --seed ist eine Verknüpfung zu diesen 3 Befehlen:
$ php artisan migrate:reset # rollback all migrations $ php artisan migrate # run migrations $ php artisan db:seed # run seeders
Sichere Nachsaat
Möglicherweise möchten Sie Ihre Datenbank erneut säen, ohne die zuvor erstellten Samen zu beeinflussen. Zu diesem Zweck können Sie firstOrCreate in Ihrem Seeder verwenden:
https://riptutorial.com/de/home 18
EmployeeType::firstOrCreate([ 'type' => 'manager', ]);
Dann können Sie die Datenbank starten:
php artisan db:seed
Wenn Sie später einen anderen Mitarbeitertyp hinzufügen möchten, können Sie den neuen Mitarbeiter in derselben Datei hinzufügen:
EmployeeType::firstOrCreate([ 'type' => 'manager', ]); EmployeeType::firstOrCreate([ 'type' => 'secretary', ]);
Und samen Sie Ihre Datenbank erneut ohne Probleme:
php artisan db:seed
Beachten Sie beim ersten Anruf, dass Sie den Datensatz abrufen, aber nichts dagegen tun.
Aussaat online lesen: https://riptutorial.com/de/laravel/topic/3272/aussaat
https://riptutorial.com/de/home 19
Kapitel 7: Authentifizierung
Examples
Multi-Authentifizierung
Mit Laravel können Sie mehrere Authentifizierungstypen mit bestimmten Schutzvorrichtungen verwenden.
In Laravel 5.3 unterscheidet sich die Mehrfachauthentifizierung nur wenig von Laravel 5.2
Ich werde in 5.3 erläutern, wie Sie die Multiauthentication-Funktion implementieren
Zunächst benötigen Sie zwei verschiedene Benutzermodelle
cp App/User.php App/Admin.php
Ändern Sie den Klassennamen in Admin und legen Sie den Namespace fest, wenn Sie andere Modelle verwenden. es sollte aussehen
App \ Admin.php
<?php namespace App; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class Admin extends Authenticatable { use Notifiable; protected $fillable = ['name', 'email', 'password']; protected $hidden = ['password', 'remember_token']; }
Außerdem müssen Sie eine Migration für den Administrator erstellen
php artisan make:migration create_admins_table
Bearbeiten Sie dann die Migrationsdatei mit den Inhalten der Standardbenutzermigration. Sieht aus wie das
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema;
https://riptutorial.com/de/home 20
class CreateAdminsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('admins', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); $table->softDeletes(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('admins'); } }
edit config / auth.php
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], //Add Admin Guard 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], ],
und
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ],
https://riptutorial.com/de/home 21
//Add Admins Provider 'admins' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ], ],
Beachten Sie, dass wir zwei Einträge hinzufügen. Eine in Guards- Variable Eine in Provider- Variable.
Und so verwenden Sie den anderen Schutz dann "Web"
Meine App \ Http \ Controllers \ Admin \ LoginController
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Support\Facades\Auth; class AuthController extends Controller { use AuthenticatesUsers; protected $guard = 'admin'; protected $redirectTo = '/admin/'; public function showLoginForm() { return view('admin.login'); } protected function guard() { return Auth::guard($this->guard); } }
das bedarf wenig Erklärung.
Kurz gesagt, mit Auth :: guard ('admin') können Sie auth-Methoden (wie login, logout, register etc.) mit Ihrem admin guard verwenden.
Zum Beispiel
Auth::guard('admin')->login($user)
sucht $ user in der admins-Tabelle und loggt sich mit dem Benutzer ein
Auth::login($user)
https://riptutorial.com/de/home 22
wird normalerweise mit Benutzertabelle arbeiten. Standardschutz ist in config / Auth.php mit Standardwerten Array angegeben. In frischem Laravel ist es "Web".
Im Controller müssen Sie Methoden von AuthenticatesUsers implementieren, um Ihre benutzerdefinierten Ansichtspfade anzuzeigen. Und Sie müssen andere Funktionen wie Guard implementieren, um Ihre neuen Benutzer-Guards verwenden zu können.
In diesem Beispiel lautet mein Administrator-Login admin / login.blade
Durch die Implementierung der guard () - Funktion zur Rückgabe von Auth :: guard ('admin') funktionieren alle AuthenticatesUsers-Merkmalsmethoden mit dem "admin" - Guard.
In früheren Versionen von Laravel unterscheidet sich dies kaum von 5.3
In 5.2 gibt die getGuard-Funktion die Variable $ guard aus der Klasse und der Hauptfunktion (login) zurück
Auth::guard($guard)->attempt(...)
In 5.3 gibt die guard-Funktion ganze Auth :: guard () zurück und die main-Funktion benutzt sie wie
$this->guard()->attempt(...)
Authentifizierung online lesen: https://riptutorial.com/de/laravel/topic/7051/authentifizierung
https://riptutorial.com/de/home 23
Kapitel 8: Benennen von Dateien beim Hochladen mit Laravel unter Windows
Parameter
Param / Funktion Beschreibung
Datei-Upload Name der Datei <input>
$ sampleNamekönnte auch eine dynamisch generierte Zeichenfolge oder der Name der vom Benutzer hochgeladenen Datei sein
app_path ()ist der Laravel-Helfer, um den absoluten Pfad zur Anwendung anzugeben
getCLientOriginalExtension ()
Laravel-Wrapper, um die Erweiterung der vom Benutzer hochgeladenen Datei wie auf dem Benutzercomputer abzurufen
Examples
Zeitstempel-Dateinamen für von Benutzern hochgeladene Dateien generieren.
Unten funktioniert auf einem Windows-Computer nicht
$file = $request->file('file_upload'); $sampleName = 'UserUpload'; $destination = app_path() . '/myStorage/'; $fileName = $sampleName . '-' . date('Y-m-d-H:i:s') . '.' . $file->getClientOriginalExtension(); $file->move($destination, $fileName);
Es wird ein Fehler wie "Datei konnte nicht nach / Pfad ... verschoben werden" ausgegeben.
Warum? - Dies funktioniert perfekt auf einem Ubuntu-Server Der Grund ist, dass unter Windows der colon ':' in einem Dateinamen nicht zulässig ist, während dies unter Linux zulässig ist. Dies ist eine so kleine Sache, dass wir es vielleicht nicht im Voraus bemerken und sich immer wieder fragen, warum ein Code, der unter Ubuntu (Linux) gut läuft, nicht funktioniert? Unsere erste Vermutung wäre, die Dateiberechtigungen und ähnliches zu überprüfen, aber wir bemerken vielleicht nicht, dass der colon ':' hier der Täter ist. Um Dateien unter Windows hochzuladen, verwenden Sie keinen colon':' während Sie mit einem Zeitstempel versehene Dateinamen generieren. Gehen Sie stattdessen wie folgt vor:
https://riptutorial.com/de/home 24
$filename = $sampleName . '-' . date('Y-m-d-H_i_s') . '.' . $file->getClientOriginalExtension(); //ex output UserUpload-2016-02-18-11_25_43.xlsx OR $filename = $sampleName . '-' .date('Y-m-d H i s') . '.' . $file->getClientOriginalExtension(); //ex output UserUpload-2016-02-18 11 25 43.xlsx OR $filename = $sampleName . '-'.date('Y-m-d_g-i-A').'.' . $file->getClientOriginalExtension(); //ex output UserUpload-2016-02-18_11-25-AM.xlsx
Benennen von Dateien beim Hochladen mit Laravel unter Windows online lesen: https://riptutorial.com/de/laravel/topic/2629/benennen-von-dateien-beim-hochladen-mit-laravel-unter-windows
https://riptutorial.com/de/home 25
Kapitel 9: Benutzerdefinierte Helferfunktion
Einführung
Das Hinzufügen von benutzerdefinierten Helfern kann Sie bei Ihrer Entwicklungsgeschwindigkeit unterstützen. Es gibt jedoch ein paar Dinge, die beim Schreiben solcher Hilfsfunktionen zu berücksichtigen sind, daher dieses Tutorial.
Bemerkungen
Nur ein paar Hinweise:
Wir haben die Funktionsdefinitionen in eine Prüfung ( function_exists ) gestellt, um Ausnahmen zu verhindern, wenn der Dienstanbieter zweimal aufgerufen wird.
•
Alternativ können Sie die Hilfedatei aus der Datei composer.json registrieren. Sie können die Logik aus dem Laravel-Framework selbst kopieren .
•
Examples
document.php
<?php if (!function_exists('document')) { function document($text = '') { return $text; } }
Erstellen Sie eine helpers.php-Datei. Nehmen wir an, sie lebt in app/Helpers/document.php . Sie können viele Helfer in einer Datei ablegen (so macht Laravel dies) oder Sie können sie nach Namen aufteilen.
HelpersServiceProvider.php
Jetzt erstellen wir einen Dienstanbieter. Lassen Sie uns es unter app/Providers :
<?php namespace App\Providers; class HelpersServiceProvider extends ServiceProvider { public function register() { require_once __DIR__ . '/../Helpers/document.php'; } }
https://riptutorial.com/de/home 26
Der obige Dienstanbieter lädt die Hilfedatei und registriert Ihre benutzerdefinierte Funktion automatisch. Bitte stellen Sie sicher, dass Sie diesen HelpersServiceProvider in Ihrer config/app.php unter providers registrieren:
'providers' => [ // [..] other providers App\Providers\HelpersServiceProvider::class, ]
Benutzen
Jetzt können Sie die Funktion document() überall in Ihrem Code verwenden, beispielsweise in Blade-Vorlagen. Dieses Beispiel gibt nur die gleiche Zeichenfolge zurück, die es als Argument erhält
<?php Route::get('document/{text}', function($text) { return document($text); });
Gehen Sie jetzt zu /document/foo in Ihrem Browser (Verwendung php artisan serve oder valet ), die zurückkehren wird foo .
Benutzerdefinierte Helferfunktion online lesen: https://riptutorial.com/de/laravel/topic/8347/benutzerdefinierte-helferfunktion
https://riptutorial.com/de/home 27
Kapitel 10: Beobachter
Examples
Einen Beobachter erstellen
Beobachter werden zum Abhören von Livecycle-Rückrufen eines bestimmten Modells in Laravel verwendet. Diese Zuhörer können eine der folgenden Aktionen abhören:
Erstellen•erstellt•Aktualisierung•aktualisierte•Sparen•Gerettet•löschen•gelöscht•Wiederherstellen•restauriert•
Hier ist ein Beispiel eines Beobachters.
UserObserver
<?php namespace App\Observers; /** * Observes the Users model */ class UserObserver { /** * Function will be triggerd when a user is updated * * @param Users $model */ public function updated($model) { // execute your own code } }
Wie im Benutzerbeobachter gezeigt, hören wir die aktualisierte Aktion. Bevor diese Klasse jedoch das Benutzermodell abhört, müssen wir sie zuerst im EventServiceProvider .
EventServiceProvider
https://riptutorial.com/de/home 28
<?php namespace App\Providers; use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; use App\Models\Users; use App\Observers\UserObserver; /** * Event service provider class */ class EventServiceProvider extends ServiceProvider { /** * Boot function * * @param DispatcherContract $events */ public function boot(DispatcherContract $events) { parent::boot($events); // In this case we have a User model that we want to observe // We tell Laravel that the observer for the user model is the UserObserver Users::observe(new UserObserver()); } }
Nachdem wir unseren Beobachter registriert haben, wird die aktualisierte Funktion jedes Mal nach dem Speichern des Benutzermodells aufgerufen.
Beobachter online lesen: https://riptutorial.com/de/laravel/topic/7128/beobachter
https://riptutorial.com/de/home 29
Kapitel 11: Berechtigungen für die Speicherung
Einführung
Laravel erfordert, dass einige Ordner für den Webserverbenutzer beschreibbar sind.
Examples
Beispiel
Wir müssen auch die korrekten Berechtigungen für storage auf dem server festlegen. Daher müssen wir eine Schreibberechtigung für das Speicherverzeichnis wie folgt erteilen:
$ chmod -R 777 ./storage ./bootstrap
oder Sie können verwenden
$ sudo chmod -R 777 ./storage ./bootstrap
Für Windows
Stellen Sie sicher, dass Sie auf diesem Computer als Administrator mit schreibberechtigtem Zugriff angemeldet sind
xampp\htdocs\laravel\app\storage needs to be writable
Normalerweise können Sie Berechtigungen festlegen, wenn Ihre Dateien dem Webserver gehören:
sudo chown -R www-data:www-data /path/to/your/root/directory
Berechtigungen für die Speicherung online lesen: https://riptutorial.com/de/laravel/topic/9797/berechtigungen-fur-die-speicherung
https://riptutorial.com/de/home 30
Kapitel 12: Beredt
Einführung
Das Eloquent ist ein im Laravel enthaltenes ORM (Object Relational Model). Es implementiert das aktive Datensatzmuster und wird zur Interaktion mit relationalen Datenbanken verwendet.
Bemerkungen
Benennung der Tabelle
Die Konvention ist die Verwendung von "snake_case" für Tabellennamen und "StudlyCase" für Modellnamen. Zum Beispiel:
Ein cats - Tabelle würde eine haben Cat Modell•Eine jungle_cats Tabelle hätte ein JungleCat Modell•Eine users hätte ein User•Ein people hätte ein Person•
Eloquent versucht automatisch, Ihr Modell mit einer Tabelle zu verbinden, die den Plural des Modellnamens enthält, wie oben angegeben.
Sie können jedoch einen Tabellennamen angeben, um die Standardkonvention zu überschreiben.
class User extends Model { protected $table = 'customers'; }
Examples
Einführung
Eloquent ist der ORM, der in das Laravel-Gerüst eingebaut ist. Sie können mit Ihren Datenbanktabellen objektorientiert mit dem ActiveRecord- Muster interagieren.
Eine einzelne Modellklasse wird normalerweise einer einzelnen Datenbanktabelle zugeordnet. Außerdem können Beziehungen verschiedener Typen ( Eins-zu-Eins , Eins-zu-Viele , Viele-Zu-Viele , Polymorph) zwischen verschiedenen Modellklassen definiert werden.
Der Abschnitt Modell erstellen beschreibt die Erstellung und Definition von Modellklassen.
Bevor Sie mit der Verwendung von Eloquent-Modellen beginnen können, müssen Sie sicherstellen, dass in der Konfigurationsdatei config/database.php mindestens eine config/database.php konfiguriert ist.
https://riptutorial.com/de/home 31
Um die Verwendung des eloquenten Query Builders während der Entwicklung zu verstehen, können Sie den php artisan ide-helper:generate Befehl php artisan ide-helper:generate . Hier ist der Link .
Unterthemen-Navigation
Eloquente Beziehung
Anhalten
Neben dem Lesen von Daten mit Eloquent können Sie auch Daten mit der save() -Methode einfügen oder aktualisieren. Wenn Sie eine neue Modellinstanz erstellt haben, wird der Datensatz eingefügt . Andernfalls wird das Modell aktualisiert , wenn Sie ein Modell aus der Datenbank abgerufen und neue Werte festgelegt haben.
In diesem Beispiel erstellen wir einen neuen User :
$user = new User(); $user->first_name = 'John'; $user->last_name = 'Doe'; $user->email = '[email protected]'; $user->password = bcrypt('my_password'); $user->save();
Sie können die create Methode auch verwenden, create Felder mit einem Datenarray aufzufüllen:
User::create([ 'first_name'=> 'John', 'last_name' => 'Doe', 'email' => '[email protected]', 'password' => bcrypt('changeme'), ]);
Bei Verwendung der create-Methode sollten Ihre Attribute im fillable Array innerhalb Ihres Modells deklariert werden:
class User extends Model { protected $fillable = [ 'first_name', 'last_name', 'email', 'password', ]; }
Wenn Sie alle Attribute massenzuweisbar machen möchten, können Sie die $ guarded -Eigenschaft als leeres Array definieren:
class User extends Model
https://riptutorial.com/de/home 32
{ /** * The attributes that aren't mass assignable. * * @var array */ protected $guarded = []; }
Sie können jedoch auch einen Datensatz erstellen, ohne das fillable Attribut in Ihrem Modell zu forceCreate , indem Sie die forceCreate Methode anstelle der create Methode verwenden
User::forceCreate([ 'first_name'=> 'John', 'last_name' => 'Doe', 'email' => '[email protected]', 'password' => bcrypt('changeme'), ]);
Im Folgenden finden Sie ein Beispiel zum Aktualisieren eines vorhandenen User , indem Sie es zunächst laden (mithilfe von find ), ändern und anschließend speichern.
$user = User::find(1); $user->password = bcrypt('my_new_password'); $user->save();
Um dieselbe Leistung mit einem einzelnen Funktionsaufruf zu erreichen, können Sie die update verwenden:
$user->update([ 'password' => bcrypt('my_new_password'), ]);
Die Methoden zum create und update machen die Arbeit mit großen Datensätzen viel einfacher, als jedes Schlüssel / Wert-Paar einzeln einstellen zu müssen, wie in den folgenden Beispielen gezeigt:
Beachten Sie die Verwendung von only und except wenn Anforderungsdaten zu sammeln. Es ist wichtig, dass Sie genau die Schlüssel angeben, die aktualisiert werden sollen / nicht zulassen. Andernfalls kann ein Angreifer zusätzliche Felder mit seiner Anforderung senden und unerwünschte Aktualisierungen verursachen.
// Updating a user from specific request data $data = Request::only(['first_name', 'email']); $user->find(1); $user->update($data); // Create a user from specific request data $data = Request::except(['_token', 'profile_picture', 'profile_name']); $user->create($data);
Löschen
https://riptutorial.com/de/home 33
Sie können Daten löschen, nachdem Sie sie in die Datenbank geschrieben haben. Sie können entweder eine Modellinstanz löschen, wenn Sie eine Instanz abgerufen haben, oder Bedingungen angeben, unter denen die Datensätze gelöscht werden sollen.
Um eine Modellinstanz zu löschen, rufen Sie sie ab und rufen die delete() -Methode auf:
$user = User::find(1); $user->delete();
Alternativ können Sie einen Primärschlüssel (oder ein Array von Primärschlüsseln) der Datensätze angeben, die Sie über die destroy() Methode löschen möchten:
User::destroy(1); User::destroy([1, 2, 3]);
Sie können das Abfragen auch mit dem Löschen kombinieren:
User::where('age', '<', 21)->delete();
Dadurch werden alle Benutzer gelöscht, die der Bedingung entsprechen.
Hinweis: Wenn Sie eine Massenlöschanweisung über Eloquent ausführen, werden die deleting und deleted Modellereignisse für die gelöschten Modelle nicht ausgelöst. Dies liegt daran, dass die Modelle beim Ausführen der Löschanweisung nie tatsächlich abgerufen werden.
Weiches Löschen
Manchmal möchten Sie einen Datensatz nicht dauerhaft löschen, sondern ihn zu Prüf- oder Berichterstellungszwecken aufbewahren. Dafür bietet Eloquent die Funktion zum sanften Löschen .
Um Ihrem Modell Soft Deletes-Funktionen hinzuzufügen, müssen Sie das SoftDeletes Merkmal importieren und es Ihrer Eloquent-Modellklasse hinzufügen:
namespace Illuminate\Database\Eloquent\Model; namespace Illuminate\Database\Eloquent\SoftDeletes; class User extends Model { use SoftDeletes; }
Wenn Sie ein Modell löschen, wird ein Zeitstempel für eine Zeitstempel-Spalte ' deleted_at in der Tabelle für Ihr Modell festgelegt. Erstellen Sie daher zuerst die Spalte deleted_at in Ihrer Tabelle. Oder Sie sollten bei der Migration die Methode softDeletes() in Ihrem Blueprint deleted_at , um den Zeitstempel deleted_at hinzuzufügen. Beispiel:
Schema::table('users', function ($table) {
https://riptutorial.com/de/home 34
$table->softDeletes(); });
Bei allen Abfragen werden nicht gelöschte Datensätze ausgelassen. Sie können sie mit Hilfe des withTrashed() erzwingen, wenn Sie möchten:
User::withTrashed()->get();
Wenn Sie Benutzern das Wiederherstellen eines Datensatzes nach dem Soft-Löschen ermöglichen möchten (z. B. in einem Papierkorb), können Sie die restore() Methode verwenden:
$user = User::find(1); $user->delete(); $user->restore();
Um einen Datensatz zwangsweise zu löschen, verwenden Sie die forceDelete() -Methode, die den Datensatz wirklich aus der Datenbank entfernt:
$user = User::find(1); $user->forceDelete();
Primärschlüssel und Zeitstempel ändern
Standardmäßig erwarten Eloquent-Modelle, dass der Primärschlüssel 'id' . Wenn dies nicht Ihr Fall ist, können Sie den Namen Ihres Primärschlüssels ändern, indem Sie die Eigenschaft $primaryKey .
class Citizen extends Model { protected $primaryKey = 'socialSecurityNo'; // ... }
Jetzt verwenden alle Eloquent-Methoden, die Ihren Primärschlüssel verwenden (z. B. find oder findOrFail ), diesen neuen Namen.
Darüber hinaus erwartet Eloquent, dass der Primärschlüssel eine automatisch inkrementierende Ganzzahl ist. Wenn Ihr Primärschlüssel keine automatisch inkrementierende Ganzzahl ist (z. B. eine GUID), müssen Sie Eloquent mitteilen, indem Sie die $incrementing Eigenschaft auf false :
class Citizen extends Model { protected $primaryKey = 'socialSecurityNo'; public $incrementing = false; // ... }
https://riptutorial.com/de/home 35
Standardmäßig erwartet Eloquent, dass die created_at und updated_at in Ihren Tabellen vorhanden sind. Wenn Sie nicht möchten, dass diese Spalten automatisch von Eloquent verwaltet werden, setzen Sie die $timestamps Ihres Modells auf false:
class Citizen extends Model { public $timestamps = false; // ... }
Wenn Sie die Namen der Spalten anpassen müssen, die zum Speichern der Zeitstempel verwendet werden, können Sie die Konstanten CREATED_AT und UPDATED_AT in Ihrem Modell UPDATED_AT :
class Citizen extends Model { const CREATED_AT = 'date_of_creation'; const UPDATED_AT = 'date_of_last_update'; // ... }
Werfen Sie 404, wenn die Entität nicht gefunden wurde
Wenn Sie bei der Suche nach einem Datensatz, der in einem Modal nicht gefunden wird, automatisch eine Ausnahme auslösen möchten, können Sie eine der beiden verwenden
Vehicle::findOrFail(1);
oder
Vehicle::where('make', 'ford')->firstOrFail();
Wenn kein Datensatz mit dem Primärschlüssel 1 gefunden wird, wird eine ModelNotFoundException ausgelöst. Welches ist im Wesentlichen dasselbe wie das Schreiben ( Quelltext anzeigen ):
$vehicle = Vehicle::find($id); if (!$vehicle) { abort(404); }
Klonen von Modellen
Möglicherweise müssen Sie eine Reihe klonen, einige Attribute ändern, aber Sie benötigen eine effiziente Möglichkeit, die Dinge trocken zu halten. Laravel bietet eine Art "versteckter" Methode, um diese Funktion ausführen zu können. Obwohl es völlig undokumentiert ist, müssen Sie die API durchsuchen, um sie zu finden.
https://riptutorial.com/de/home 36
Mit $model->replicate() Sie einen Datensatz einfach klonen
$robot = Robot::find(1); $cloneRobot = $robot->replicate(); // You can add custom attributes here, for example he may want to evolve with an extra arm! $cloneRobot->arms += 1; $cloneRobot->save();
Das Obige würde einen Roboter mit der ID 1 finden und dann klonen.
Beredt online lesen: https://riptutorial.com/de/laravel/topic/865/beredt
https://riptutorial.com/de/home 37
Kapitel 13: Blade-Vorlagen
Einführung
Laravel unterstützt Blade-Templating-Engine aus der Box. Mit der Blade-Template-Engine können wir Master-Templates erstellen und untergeordnete Templates zum Laden von Inhalten aus Master-Templates erstellen. In der Blade-Datei können Variablen, Schleifen und Bedingungsanweisungen enthalten sein.
Examples
Ansichten: Einführung
Ansichten in einem MVC-Muster enthalten die Logik, wie dem Benutzer Daten angezeigt werden. In einer Webanwendung werden sie normalerweise zum Generieren der HTML-Ausgabe verwendet, die mit jeder Antwort an die Benutzer zurückgesendet wird. Ansichten in Laravel werden standardmäßig im Verzeichnis resources/views gespeichert.
Eine Ansicht kann mit der view Helper-Funktion aufgerufen werden:
view(string $path, array $data = [])
Der erste Parameter des Helpers ist der Pfad zu einer Ansichtsdatei, und der zweite Parameter ist ein optionales Array von Daten, die an die Ansicht übergeben werden.
Um die resources/views/example.php aufzurufen, würden Sie also Folgendes verwenden:
view('example');
Dateien in Unterordnern im Verzeichnis resources/views , wie z. B. resources/views/parts/header/navigation.php , können mit Punktnotation aufgerufen werden: view('parts.header.navigation');
In einer Ansichtsdatei, wie z. B. resources/views/example.php , können Sie HTML und PHP zusammen hinzufügen:
<html> <head> <title>Hello world!</title> </head> <body> <h1>Welcome!</h1> <p>Your name is: <?php echo $name; ?></p> </body> </html>
Im vorherigen Beispiel (das keine Blade-spezifische Syntax verwendet) geben wir die Variable
https://riptutorial.com/de/home 38
$name . Um diesen Wert an unsere Ansicht zu übergeben, übergeben wir beim Aufruf des View-Helpers ein Array von Werten:
view('example', ['name' => $name]);
oder verwenden Sie alternativ den compact() Helfer. In diesem Fall entspricht der an compact () übergebene String dem Namen der Variablen, die an die Ansicht übergeben werden soll.
view('example', compact('name'));
NAMING-KONVENTION FÜR BLATT-VARIABLEN
Beim Senden von Daten zur Ansicht zurück. Sie können underscore für variable mit mehreren Wörtern verwenden variable aber mit - laravel gibt Fehler aus.
So wird ein Fehler (Hinweis hyphen ( - ) in der user-address
view('example',['user-address' => 'Some Address']);
Der richtige Weg , dies zu tun, wird sein
view('example', ['user_address' => 'Some Address']);
Kontrollstrukturen
Blade bietet eine komfortable Syntax für gängige PHP-Kontrollstrukturen.
Jede der Kontrollstrukturen beginnt mit @[structure] und endet mit @[endstructure] . Beachten Sie, dass wir innerhalb der Tags normales HTML eingeben und Variablen in die Blade-Syntax einbeziehen.
Conditionals
"If" -Anweisungen
@if ($i > 10) <p>{{ $i }} is large.</p> @elseif ($i == 10) <p>{{ $i }} is ten.</p> @else <p>{{ $i }} is small.</p> @endif
"Es sei denn" Aussagen
(Kurze Syntax für 'wenn nicht'.)
https://riptutorial.com/de/home 39
@unless ($user->hasName()) <p>A user has no name.</p> @endunless
Schleifen
'While-Schleife
@while (true) <p>I'm looping forever.</p> @endwhile
Foreach-Schleife
@foreach ($users as $id => $name) <p>User {{ $name }} has ID {{ $id }}.</p> @endforeach
"Forelse" -Schleife
(Wie 'foreach' -Schleife, fügt jedoch eine spezielle @empty Direktive hinzu, die ausgeführt wird, wenn der Array-Ausdruck leer ist, um den Standardinhalt anzuzeigen.)
@forelse($posts as $post) <p>{{ $post }} is the post content.</p> @empty <p>There are no posts.</p> @endforelse
Innerhalb von Schleifen steht eine spezielle $loop Variable zur Verfügung, die Informationen über den Zustand der Schleife enthält:
Eigentum Beschreibung
$loop->index Der Index der aktuellen Schleifeniteration (beginnt bei 0).
$loop->iteration Die aktuelle Schleifeniteration (beginnt bei 1).
$loop->remaining Die verbleibenden Schleifeniterationen.
$loop->count Die Gesamtzahl der Elemente im Array, die iteriert werden.
$loop->first Ob dies die erste Iteration durch die Schleife ist.
$loop->last Ob dies die letzte Iteration durch die Schleife ist.
https://riptutorial.com/de/home 40
Eigentum Beschreibung
$loop->depth Die Verschachtelungsebene der aktuellen Schleife.
$loop->parentIn einer verschachtelten Schleife die Schleifenvariable des übergeordneten Objekts.
Beispiel:
@foreach ($users as $user) @foreach ($user->posts as $post) @if ($loop->parent->first) This is first iteration of the parent loop. @endif @endforeach @endforeach
Seit Laravel 5.2.22 können wir auch die Direktiven @continue und @break
Eigentum Beschreibung
@continue Stoppen Sie die aktuelle Iteration und starten Sie die nächste.
@break Stoppen Sie die Stromschleife.
Beispiel:
@foreach ($users as $user) @continue ($user->id == 2) <p>{{ $user->id }} {{ $user->name }}</p> @break ($user->id == 4) @endforeach
Dann wird die Seite gerendert ( vorausgesetzt, dass mehr als fünf Benutzer nach ID sortiert sind und keine ID fehlt )
1 Dave 3 John 4 William
Echo von PHP-Ausdrücken
Jeder PHP - Ausdruck in doppelten geschweifte Klammern {{ $variable }} wird echo ed nachdem sie durch die laufen wird e - Helferfunktion . (So werden HTML-Sonderzeichen ( < , > , " , ' , & ) für die entsprechenden HTML-Entitäten sicher ersetzt.) (Der PHP-Ausdruck muss als Zeichenfolge ausgewertet werden, andernfalls wird eine Ausnahme ausgelöst.)
Eine Variable wiederholen
https://riptutorial.com/de/home 41
{{ $variable }}
Echo eines Elements in einem Array
{{ $array["key"] }}
Echo einer Objekteigenschaft
{{ $object->property }}
Das Ergebnis eines Funktionsaufrufs wiederholen
{{ strtolower($variable) }}
Existenz prüfen
Normalerweise wird in PHP normalerweise geprüft, ob eine Variable gesetzt und gedruckt wurde
Vor PHP 7•
<?php echo isset($variable) ? $variable : 'Default'; ?>
Nach PHP 7 (mit dem "Null-Koaleszenz-Operator")•
<?php echo $variable ?? 'Default'; ?>
Blade Operator or macht das einfacher:
{{ $variable or 'Default' }}
Rohe Echos
Wie bereits erwähnt, wird die Syntax der doppelten geschweiften Klammern {{ }} aus Sicherheitsgründen aus der htmlspecialchars Funktion von PHP herausgefiltert (Verhindern einer böswilligen HTML- htmlspecialchars in die Ansicht). Wenn Sie dieses Verhalten umgehen möchten, beispielsweise wenn Sie versuchen, einen Block von HTML-Inhalt auszugeben, der aus einem PHP-Ausdruck resultiert, verwenden Sie die folgende Syntax:
{!! $myHtmlString !!}
Beachten Sie, dass es eine bewährte Methode ist, die Standardsyntax {{ }} zu verwenden, um
https://riptutorial.com/de/home 42
Ihre Daten zu schützen, sofern dies nicht unbedingt erforderlich ist. Wenn Sie nicht vertrauenswürdige Inhalte (z. B. von Benutzern Ihrer Website bereitgestellte Inhalte) wiedergeben, sollten Sie die Verwendung der {!! !!} Syntax.
Einschließlich Teilansichten
Mit Blade können Sie auch Teilansichten (so genannte "partials") direkt in eine Seite einbinden:
@include('includes.info', ['title' => 'Information Station'])
Der obige Code enthält die Ansicht unter 'views / includes / info.blade.php'. Es wird auch eine Variable $title mit dem Wert 'Information Station' übergeben.
Im Allgemeinen hat eine eingeschlossene Seite Zugriff auf alle Variablen, auf die die aufrufende Seite Zugriff hat. Wenn wir zum Beispiel haben:
{{$user}} // Outputs 'abc123' @include('includes.info')
Und 'Includes / info.blade.php' hat folgendes:
<p>{{$user}} is the current user.</p>
Dann wird die Seite gerendert:
abc123 abc123 is the current user.
Jedes einschließen
Manchmal möchten Sie eine include Anweisung mit einer foreach Anweisung kombinieren und auf die Variablen innerhalb der foreach-Schleife im include zugreifen. Verwenden Sie in diesem Fall die @each Direktive von Blade:
@each('includes.job', $jobs, 'job')
Der erste Parameter ist die einzuschließende Seite. Der zweite Parameter ist das zu iterierende Array. Der dritte Parameter ist die den Elementen des Arrays zugewiesene Variable. Die obige Aussage entspricht:
@foreach($jobs as $job) @include('includes.job', ['job' => $job]) @endforeach
Sie können der @each Direktive auch ein optionales viertes Argument @each , um die Ansicht anzugeben, die @each , wenn das Array leer ist.
@each('includes.job', $jobs, 'job', 'includes.jobsEmpty')
https://riptutorial.com/de/home 43
Vererbung des Layouts
Ein Layout ist eine Ansichtsdatei, die um andere Ansichten erweitert wird, die Codeblöcke in ihr übergeordnetes Element einfügen. Zum Beispiel:
parent.blade.php:
<html> <head> <style type='text/css'> @yield('styling') </style> </head> <body> <div class='main'> @yield('main-content') </div> </body> </html>
child.blade.php:
@extends('parent') @section('styling') .main { color: red; } @stop @section('main-content') This is child page! @stop
otherpage.blade.php:
@extends('parent') @section('styling') .main { color: blue; } @stop @section('main-content') This is another page! @stop
Hier sehen Sie zwei beispielhafte untergeordnete Seiten, die jeweils die übergeordneten Seiten erweitern. Die @section Seiten definieren ein @section , das bei der entsprechenden @yield Anweisung in das übergeordnete @yield eingefügt wird.
Die Ansicht, die von View::make('child') gerendert wird, sagt also " This is child page! " In rot, während View::make('otherpage') dieselbe HTML View::make('otherpage') erzeugt, außer mit dem
https://riptutorial.com/de/home 44
Text " Dies ist ein anderer Seite! "stattdessen in blau.
Es ist üblich, die Ansichtsdateien voneinander zu trennen, z. B. mit einem Layouts-Ordner für die Layoutdateien und einem separaten Ordner für die verschiedenen spezifischen Ansichten.
Die Layouts sollen den Code anwenden, der auf jeder Seite angezeigt werden soll, z. B. Hinzufügen einer Seitenleiste oder eines Headers, ohne dass die HTML-Boilerplate in jeder einzelnen Ansicht geschrieben werden muss.
Ansichten können wiederholt erweitert werden, dh page3 kann @extend('page2') und page2 kann @extend('page1') .
Der Befehl zum Erweitern verwendet dieselbe Syntax wie für View::make und @include , daher wird auf die Datei layouts/main/page.blade.php als layouts.main.page .
Daten für alle Ansichten freigeben
Manchmal müssen Sie in vielen Ansichten die gleichen Daten festlegen.
View :: share verwenden
// "View" is the View Facade View::share('shareddata', $data);
Danach steht der Inhalt von $data in allen Ansichten unter dem Namen $shareddata .
View::share wird normalerweise in einem Dienstanbieter oder möglicherweise im Konstruktor eines Controllers aufgerufen. Daher werden die Daten nur in Ansichten geteilt, die nur von diesem Controller zurückgegeben werden.
View :: composer verwenden
View-Komponisten sind Callbacks oder Klassenmethoden, die beim Rendern einer View aufgerufen werden. Wenn Sie Daten haben, die bei jeder Wiedergabe dieser Ansicht an eine Ansicht gebunden werden sollen, kann ein View-Composer Ihnen dabei helfen, diese Logik an einem einzigen Ort zu organisieren. Sie können Variablen direkt an eine bestimmte Ansicht oder an alle Ansichten binden.
Closure-basierter Komponist
use Illuminate\Support\Facades\View; // ... View::composer('*', function ($view) { $view->with('somedata', $data);
https://riptutorial.com/de/home 45
});
Klassenbasierter Komponist
use Illuminate\Support\Facades\View; // ... View::composer('*', 'App\Http\ViewComposers\SomeComposer');
Wie bei View::share ist es am besten, die Komponisten bei einem Dienstanbieter zu registrieren.
Wenn Sie den Ansatz der Composer-Klasse verwenden, haben Sie App/Http/ViewComposers/SomeComposer.php mit:
use Illuminate\Contracts\View\View; class SomeComposer { public function compose(View $view) { $view->with('somedata', $data); } }
Diese Beispiele verwenden '*' in der Composer-Registrierung. Dieser Parameter ist eine Zeichenfolge, die mit den Namen der Ansicht übereinstimmt, für die der Komponist registriert werden soll ( * als Platzhalter). Sie können auch eine einzelne Ansicht (z. B. 'home' ) einer Gruppe von Routen unter einem Unterordner auswählen (z. B. 'users.*' ).
Beliebigen PHP-Code ausführen
Obwohl es möglicherweise nicht angemessen ist, eine solche Ansicht in einer Ansicht auszuführen, wenn Sie die Bedenken strikt voneinander trennen möchten, ermöglicht die Blade-Direktive von php eine Möglichkeit, PHP-Code auszuführen, beispielsweise um eine Variable zu setzen:
@php($varName = 'Enter content ')
(gleich wie:)
@php $varName = 'Enter content '; @endphp
später:
{{ $varName }}
https://riptutorial.com/de/home 46
Ergebnis:
Inhalt eingeben
Blade-Vorlagen online lesen: https://riptutorial.com/de/laravel/topic/1407/blade-vorlagen
https://riptutorial.com/de/home 47
Kapitel 14: Controller
Einführung
Anstatt Ihre gesamte Logik für die Anforderungsverarbeitung als Closures in Routendateien zu definieren, können Sie dieses Verhalten mit Controller-Klassen organisieren. Controller können zugehörige Anforderungsverarbeitungslogiken in einer einzigen Klasse zusammenfassen. Controller werden standardmäßig im Verzeichnis app/Http/Controllers gespeichert.
Examples
Grundsteuerungen
<?php namespace App\Http\Controllers; use App\User; use App\Http\Controllers\Controller; class UserController extends Controller { /** * Show the profile for the given user. * * @param int $id * @return Response */ public function show($id) { return view('user.profile', ['user' => User::findOrFail($id)]); } }
Sie können eine Route zu dieser Controller-Aktion wie folgt definieren:
Route::get('user/{id}', 'UserController@show');
Wenn nun eine Anforderung mit dem angegebenen Routen-URI übereinstimmt, wird die show Methode für die UserController Klasse ausgeführt. Natürlich werden auch die Routenparameter an die Methode übergeben.
Controller-Middleware
In den Routendateien kann den Routen des Controllers Middleware zugewiesen werden:
Route::get('profile', 'UserController@show')->middleware('auth');
Es ist jedoch praktischer, die Middleware im Konstruktor Ihres Controllers anzugeben. Mit der Middleware-Methode des Konstruktors Ihres Controllers können Sie der Aktion des Controllers
https://riptutorial.com/de/home 48
problemlos Middleware zuweisen.
class UserController extends Controller { /** * Instantiate a new controller instance. * * @return void */ public function __construct() { $this->middleware('auth'); $this->middleware('log')->only('index'); $this->middleware('subscribed')->except('store'); } }
Ressourcencontroller
Das Laravel-Ressourcenrouting weist einem Controller die typischen "CRUD" -Routen mit einer einzelnen Codezeile zu. Sie möchten beispielsweise einen Controller erstellen, der alle HTTP-Anforderungen für "Fotos" verarbeitet, die in Ihrer Anwendung gespeichert sind. Mit dem Befehl make:controller Artisan können Sie schnell einen solchen Controller erstellen:
php artisan make:controller PhotoController --resource
Dieser Befehl generiert einen Controller unter app/Http/Controllers/PhotoController.php . Der Controller enthält eine Methode für jede der verfügbaren Ressourcenoperationen.
Beispiel für einen Resource Controller
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class PhotoController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response
https://riptutorial.com/de/home 49
*/ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // }
https://riptutorial.com/de/home 50
}
Im Beispiel für den Ressourcencontroller wird der Methodenname der in der nachstehenden Tabelle angegebenen Namen verwendet.
Als Nächstes können Sie eine hilfreiche Route zum Controller registrieren:
Route::resource('photos', 'PhotoController');
Diese Einzelroutendeklaration erstellt mehrere Routen, um eine Vielzahl von Aktionen für die Ressource auszuführen. Für den generierten Controller sind bereits Methoden für jede dieser Aktionen hinterlegt, einschließlich Notizen, die Sie über die HTTP-Verben und die URIs informieren, die sie behandeln.
Vom Ressourcen-Controller gehandhabte Aktionen
Verb URI Aktion Routenname
ERHALTEN /photos Index fotos.index
ERHALTEN /photos/create erstellen Fotos erstellen
POST /photos Geschäft Fotos.Store
ERHALTEN /photos/{photo} Show fotos.show
ERHALTEN /photos/{photo}/edit bearbeiten fotos.edit
PUT / PATCH /photos/{photo} aktualisieren fotos.update
LÖSCHEN /photos/{photo} zerstören fotos.destroy
Controller online lesen: https://riptutorial.com/de/laravel/topic/10604/controller
https://riptutorial.com/de/home 51
Kapitel 15: Cron-Grundlagen
Einführung
Cron ist ein Task-Scheduler-Daemon, der in bestimmten Intervallen geplante Tasks ausführt. Cron verwendet eine Konfigurationsdatei namens crontab, die auch als crontabelle bezeichnet wird, um den Planungsprozess zu verwalten.
Examples
Cron-Job erstellen
Crontab enthält Cron-Jobs, die sich jeweils auf eine bestimmte Aufgabe beziehen. Cron-Jobs bestehen aus zwei Teilen, dem Cron-Ausdruck und einem auszuführenden Shell-Befehl:
* * * * * Befehl / zum / Ausführen
Jedes Feld im obigen Ausdruck * * * * * ist eine Option zum Festlegen der Häufigkeit des Zeitplans. Sie setzt sich aus Minute, Stunde, Tag des Monats, Monat und Wochentag in der Reihenfolge der Platzierung zusammen. Das Sternsymbol bezieht sich auf alle möglichen Werte für das jeweilige Feld. Der obige Cron-Job wird daher jede Minute am Tag ausgeführt.
Der folgende Cron-Job wird jeden Tag um 12:30 ausgeführt:
30 12 * * * Befehl / zum / Ausführen
Cron-Grundlagen online lesen: https://riptutorial.com/de/laravel/topic/9891/cron-grundlagen
https://riptutorial.com/de/home 52
Kapitel 16: CustomException-Klasse in Laravel
Einführung
PHP-Ausnahmen werden ausgelöst, wenn ein beispielloses Ereignis oder Fehler auftritt.
Als Faustregel gilt, dass keine Ausnahme zur Steuerung der Anwendungslogik verwendet werden sollte, z. B. if-Anweisungen, und sollte eine Unterklasse der Exception-Klasse sein.
Ein Hauptvorteil, wenn alle Ausnahmen von einer einzelnen Klasse erfasst werden, besteht darin, dass wir benutzerdefinierte Ausnahmebehandler erstellen können, die je nach Ausnahmebedingung unterschiedliche Antwortnachrichten zurückgeben.
Examples
CustomException-Klasse in Laravel
Alle Fehler und Ausnahmen (benutzerdefiniert und Standard) werden von der Handler-Klasse in app / Exceptions / Handler.php mit zwei Methoden behandelt.
Bericht()•
machen()
public function render($request, Exception $e) { //check if exception is an instance of ModelNotFoundException. if ($e instanceof ModelNotFoundException) { // ajax 404 json feedback if ($request->ajax()) { return response()->json(['error' => 'Not Found'], 404); } // normal 404 view page feedback return response()->view('errors.missing', [], 404); } return parent::render($request, $e); }
•
Erstellen Sie dann eine Ansicht, die sich auf Fehler im Fehlerordner mit dem Namen 404.blade.php bezieht
Benutzer wurde nicht gefunden.
Sie haben das Gleichgewicht des Internets gebrochen
https://riptutorial.com/de/home 53
CustomException-Klasse in Laravel online lesen: https://riptutorial.com/de/laravel/topic/9550/customexception-klasse-in-laravel
https://riptutorial.com/de/home 54
Kapitel 17: Dateisystem / Cloud-Speicher
Examples
Aufbau
Die Dateisystem-Konfigurationsdatei befindet sich unter config/filesystems.php . In dieser Datei können Sie alle "Festplatten" konfigurieren. Jede Festplatte steht für einen bestimmten Speichertreiber und Speicherort. Beispielkonfigurationen für jeden unterstützten Treiber sind in der Konfigurationsdatei enthalten. Ändern Sie einfach die Konfiguration entsprechend Ihren Speichereinstellungen und Anmeldeinformationen!
Bevor Sie die S3- oder Rackspace-Treiber verwenden, müssen Sie das entsprechende Paket über Composer installieren:
Amazon S3: league/flysystem-aws-s3-v2 ~1.0•Rackspace: league/flysystem-rackspace ~1.0•
Natürlich können Sie beliebig viele Festplatten konfigurieren und haben sogar mehrere Festplatten, die denselben Treiber verwenden.
Beachten Sie bei der Verwendung des lokalen Treibers, dass alle Dateioperationen relativ zu dem in Ihrer Konfigurationsdatei definierten Stammverzeichnis sind. Standardmäßig ist dieser Wert auf das storage/app directory . Daher würde die folgende Methode eine Datei in storage/app/file.txt speichern:
Storage::disk('local')->put('file.txt', 'Contents');
Grundlegende Verwendung
Die Storage kann für die Interaktion mit einer der konfigurierten Festplatten verwendet werden. Alternativ können Sie auch den Illuminate\Contracts\Filesystem\Factory Vertrag für jede Klasse eingeben, die über den Laravel-Service-Container aufgelöst wird.
Eine bestimmte Festplatte abrufen
$disk = Storage::disk('s3'); $disk = Storage::disk('local');
Bestimmen, ob eine Datei vorhanden ist
$exists = Storage::disk('s3')->exists('file.jpg');
Aufrufen von Methoden auf der Standardfestplatte
https://riptutorial.com/de/home 55
if (Storage::exists('file.jpg')) { // }
Inhalt einer Datei abrufen
$contents = Storage::get('file.jpg');
Inhalt einer Datei einstellen
Storage::put('file.jpg', $contents);
Vorbereiten einer Datei
Storage::prepend('file.log', 'Prepended Text');
An eine Datei anhängen
Storage::append('file.log', 'Appended Text');
Eine Datei löschen
Storage::delete('file.jpg'); Storage::delete(['file1.jpg', 'file2.jpg']);
Kopieren Sie eine Datei an einen neuen Speicherort
Storage::copy('old/file1.jpg', 'new/file1.jpg');
Verschieben Sie eine Datei an einen neuen Speicherort
Storage::move('old/file1.jpg', 'new/file1.jpg');
Dateigröße erhalten
$size = Storage::size('file1.jpg');
Letzte Änderungszeit (UNIX)
$time = Storage::lastModified('file1.jpg');
Holen Sie sich alle Dateien in einem Verzeichnis
$files = Storage::files($directory); // Recursive...
https://riptutorial.com/de/home 56
$files = Storage::allFiles($directory);
Holen Sie sich alle Verzeichnisse in einem Verzeichnis
$directories = Storage::directories($directory); // Recursive... $directories = Storage::allDirectories($directory);
Erstellen Sie ein Verzeichnis
Storage::makeDirectory($directory);
Ein Verzeichnis löschen
Storage::deleteDirectory($directory);
Benutzerdefinierte Dateisysteme
Die Flysystem-Integration von Laravel bietet Treiber für mehrere "Treiber", die sofort einsatzbereit sind. Flysystem ist jedoch nicht darauf beschränkt und verfügt über Adapter für viele andere Speichersysteme. Sie können einen benutzerdefinierten Treiber erstellen, wenn Sie einen dieser zusätzlichen Adapter in Ihrer Laravel-Anwendung verwenden möchten. Keine Sorge, es ist nicht zu schwer!
Um das benutzerdefinierte Dateisystem einzurichten, müssen Sie einen Dienstanbieter wie DropboxFilesystemServiceProvider . In der boot Methode des Providers können Sie eine Instanz des Illuminate\Contracts\Filesystem\Factory einfügen und die extend der injizierten Instanz aufrufen. Alternativ können Sie die extend der Disk Fassade verwenden.
Das erste Argument der extend Methode ist der Name des Treibers und das zweite Argument ist ein Closure, der die Variablen $app und $config empfängt. Der Resolver-Abschluss muss eine Instanz von League\Flysystem\Filesystem .
Hinweis: Die $ config-Variable enthält bereits die Werte, die in config/filesystems.php für den angegebenen Datenträger definiert sind. Dropbox-Beispiel
<?php namespace App\Providers; use Storage; use League\Flysystem\Filesystem; use Dropbox\Client as DropboxClient; use League\Flysystem\Dropbox\DropboxAdapter; use Illuminate\Support\ServiceProvider; class DropboxFilesystemServiceProvider extends ServiceProvider { public function boot() { Storage::extend('dropbox', function($app, $config) {
https://riptutorial.com/de/home 57
$client = new DropboxClient($config['accessToken'], $config['clientIdentifier']); return new Filesystem(new DropboxAdapter($client)); }); } public function register() { // } }
Erstellen eines symbolischen Links in einem Webserver mit SSH
In der Laravel-Dokumentation sollte ein symbolischer Link (Symlink oder Softlink) von public / storage nach storage / app / public erstellt werden, um Dateien aus dem Web zugänglich zu machen.
(DIESES VERFAHREN WIRD SYMBOLISCHE VERBINDUNG IM LARAVEL-PROJEKTVERZEICHNIS ERSTELLEN.)
Gehen Sie wie folgt vor, um auf Ihrem Linux-Webserver mithilfe des SSH-Clients einen symbolischen Link zu erstellen:
Verbinden Sie sich über einen SSH-Client (z. B. PUTTY) mit Ihrem Webserver.1.
Verknüpfen Sie Storage / App / public mit public / storage mithilfe der Syntax
ln -s target_path link_path
Beispiel (im CPanel-Dateiverzeichnis)
ln -s /home/cpanel_username/project_name/storage/app/public /home/cpanel_sername/project_name/public/storage
2.
(Ein Ordner mit dem Namen " Speicher" wird erstellt, um den Pfad mit einem Indikator >>> auf dem Ordnersymbol zu verknüpfen.)
Dateisystem / Cloud-Speicher online lesen: https://riptutorial.com/de/laravel/topic/3040/dateisystem---cloud-speicher
https://riptutorial.com/de/home 58
Kapitel 18: Datenbank
Examples
Mehrere Datenbankverbindungen
Mit Laravel können Benutzer an mehreren Datenbankverbindungen arbeiten. Wenn Sie eine Verbindung zu mehreren Datenbanken herstellen und diese zusammenarbeiten müssen, achten Sie auf den Verbindungsaufbau.
Sie erlauben auch die Verwendung verschiedener Datenbanktypen in derselben Anwendung, wenn Sie dies benötigen.
Standardverbindung In config/database.php können Sie den Aufruf des Konfigurationselements sehen:
'default' => env('DB_CONNECTION', 'mysql'),
Dieser Name verweist auf den Namen mysql der Verbindungen:
'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'database' => database_path('database.sqlite'), 'prefix' => '', ], 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, 'engine' => null, ], ],
Wenn Sie den Namen der Datenbankverbindung nicht in anderen Codes oder Befehlen angegeben haben, wird Laravel den Standardnamen der Datenbankverbindung ermitteln. Bei mehreren Datenbankverbindungen können Sie jedoch selbst bei der Einrichtung der Standardverbindung besser festlegen, welche Datenbankverbindung Sie verwendet haben.
Migrationsdatei
In einer Migrationsdatei können Sie bei einer einzelnen Datenbankverbindung Folgendes
https://riptutorial.com/de/home 59
verwenden:
Schema::create("table",function(Blueprint $table){ $table->increments('id'); });
In einer Datenbankverbindung verwenden Sie die Methode connection() , um Laravel mitzuteilen, welche Datenbankverbindung Sie verwenden:
Schema::connection("sqlite")->create("table",function(Blueprint $table){ $table->increments('id'); });
Handwerker migrieren
Wenn Sie eine einzige Datenbankverbindung verwenden, führen Sie Folgendes aus:
php artisan migrate
Bei einer Verbindung mit mehreren Datenbanken sollten Sie jedoch besser wissen, welche Datenbankverbindung die Migrationsdaten verwaltet. So führen Sie den folgenden Befehl aus:
php artisan migrate:install --database=sqlite
Dieser Befehl installiert die Migrationstabelle in der Zieldatenbank, um die Migration vorzubereiten.
php artisan migrate --database=sqlite
Dieser Befehl führt die Migration aus und speichert die Migrationsdaten in der Zieldatenbank
php artisan migrate:rollback --database=sqlite
Dieser Befehl führt die Migration zurück und speichert die Migrationsdaten in der Zieldatenbank
Eloquentes Modell
Um eine Datenbankverbindung mit Eloquent anzugeben, müssen Sie die $connection -Eigenschaft definieren:
namespace App\Model\Sqlite; class Table extends Model { protected $table="table"; protected $connection = 'sqlite'; }
So legen Sie eine weitere (zweite) Datenbankverbindung mit Eloquent fest:
namespace App\Model\MySql;
https://riptutorial.com/de/home 60
class Table extends Model { protected $table="table"; protected $connection = 'mysql'; }
Laravel verwendet die in einem Modell definierte $connection -Eigenschaft, um die in config/database.php definierte angegebene Verbindung zu verwenden. Wenn die $connection -Eigenschaft nicht in einem Modell definiert ist, wird der Standardwert verwendet.
Sie können auch eine andere Verbindung mit der Methode static on angeben:
// Using the sqlite connection Table::on('sqlite')->select(...)->get() // Using the mysql connection Table::on('mysql')->select(...)->get()
Datenbank / Abfrage-Generator
Sie können auch eine andere Verbindung mit dem Query Builder angeben:
// Using the sqlite connection DB::connection('sqlite')->table('table')->select(...)->get() // Using the mysql connection DB::connection('mysql')->table('table')->select(...)->get()
Gerätetest
Laravel stellt seeInDatabase($table,$fielsArray,$connection) zum Testen des Datenbankverbindungscodes seeInDatabase($table,$fielsArray,$connection) . In der Unit-Testdatei müssen Sie Folgendes tun:
$this ->json( 'GET', 'result1/2015-05-08/2015-08-08/a/123' ) ->seeInDatabase("log", ["field"=>"value"], 'sqlite');
Auf diese Weise weiß Laravel, welche Datenbankverbindung getestet werden soll.
Datenbanktransaktionen im Komponententest
Laravel ermöglicht es der Datenbank, alle Änderungen während der Tests rückgängig zu machen. Um mehrere Datenbankverbindungen testen zu können, müssen Sie die $connectionsToTransact Eigenschaften festlegen
use Illuminate\Foundation\Testing\DatabaseMigrations; class ExampleTest extends TestCase { use DatabaseTransactions;
https://riptutorial.com/de/home 61
$connectionsToTransact =["mysql","sqlite"] //tell Laravel which database need to rollBack public function testExampleIndex() { $this->visit('/action/parameter') ->see('items'); } }
Datenbank online lesen: https://riptutorial.com/de/laravel/topic/1093/datenbank
https://riptutorial.com/de/home 62
Kapitel 19: Datenbank Seeding
Examples
Seeder ausführen
Sie können Ihren neuen Seeder der DatabaseSeeder-Klasse hinzufügen.
/** * Run the database seeds. * * @return void */ public function run() { $this->call(UserTableSeeder::class); }
Verwenden Sie den Befehl Artisan, um einen Datenbank-Seeder auszuführen
php artisan db:seed
Dadurch wird die DatabaseSeeder-Klasse ausgeführt. Sie können auch die Option --class= um manuell anzugeben, welche Sämaschine ausgeführt werden soll.
* Beachten Sie, dass Sie möglicherweise Composer dumpautoload ausführen müssen, wenn Ihre Seeder-Klasse nicht gefunden werden kann. Dies geschieht normalerweise, wenn Sie manuell eine Seeder-Klasse erstellen, anstatt den Befehl handwerklich zu verwenden.
Einen Samen erstellen
Datenbank-Seeds werden im Verzeichnis / database / seeds gespeichert. Sie können einen Samen mit einem Artisan-Befehl erstellen.
php artisan make:seed UserTableSeeder
Alternativ können Sie eine neue Klasse erstellen, die Illuminate\Database\Seeder . Die Klasse muss eine öffentliche Funktion namens run() .
Daten mit einem Seeder einfügen
Sie können Modelle in einer Sämaschine referenzieren.
use DB; use App\Models\User; class UserTableSeeder extends Illuminate\Database\Seeder{
https://riptutorial.com/de/home 63
public function run(){ # Remove all existing entrie DB::table('users')->delete() ; User::create([ 'name' => 'Admin', 'email' => '[email protected]', 'password' => Hash::make('password') ]); } }
Einfügen von Daten mit einer Modellfabrik
Möglicherweise möchten Sie Modellfabriken in Ihrem Samen verwenden. Dadurch werden 3 neue Benutzer erstellt.
use App\Models\User; class UserTableSeeder extends Illuminate\Database\Seeder{ public function run(){ factory(User::class)->times(3)->create(); } }
Möglicherweise möchten Sie auch bestimmte Felder in Ihrem Seeding definieren, beispielsweise ein Kennwort. Dadurch werden 3 Benutzer mit demselben Passwort erstellt.
factory(User::class)->times(3)->create(['password' => '123456']);
Seeding mit MySQL Dump
Folgen Sie dem vorherigen Beispiel zum Erstellen eines Seed. In diesem Beispiel wird ein MySQL-Dump zum Seeding einer Tabelle in der Projektdatenbank verwendet. Die Tabelle muss vor dem Seeding erstellt werden.
<?php use Illuminate\Database\Seeder; class UserTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $sql = file_get_contents(database_path() . '/seeds/users.sql'); DB::statement($sql);
https://riptutorial.com/de/home 64
} }
Unser $ sql wird der Inhalt unseres user.sql-Dumps sein. Der Dump sollte eine INSERT INTO-Anweisung haben. Es liegt an Ihnen, wo Sie Ihre Dumps aufbewahren. Im obigen Beispiel wird es im Projektverzeichnis \database\seeds gespeichert. Verwenden der Hilfsfunktion database_path() laravel und Anhängen des Verzeichnis- und Dateinamens des Speicherauszugs.
INSERT INTO `users` (`id`, `name`, `email`, `password`, `remember_token`, `created_at`, `updated_at`) VALUES (1, 'Jane', '[email protected]', 'superSecret', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00'), (2, 'John', '[email protected]', 'sup3rS3cr3t', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00');
DB::statement($sql) führt die Einfügungen aus, sobald der Seeder ausgeführt wird. Wie in den vorherigen Beispielen können Sie den UserTableSeeder in die von laravel bereitgestellte DatabaseSeeder Klasse einfügen:
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $this->call(UserTableSeeder::class); } }
und von CLI im Projektverzeichnis php artisan db:seed ausführen. Oder Sie können den Seeder für eine einzelne Klasse mit php artisan db:seed --class=UsersTableSeeder
Verwenden von Faker und ModelFactories zum Generieren von Seeds
1) EINFACHE WEGE
Datenbankgesteuerte Anwendungen benötigen häufig Daten, die zu Test- und Demozwecken in das System eingebettet sind.
Um solche Daten zu erstellen, erstellen Sie zuerst die Seeder-Klasse
ProductTableSeeder
use Faker\Factory as Faker; use App\Product;
https://riptutorial.com/de/home 65
class ProductTableSeeder extends DatabaseSeeder { public function run() { $faker = $this->getFaker(); for ($i = 0; $i < 10; $i++) { $name = $faker->word; $image = $faker->imageUrl; Modelname::create([ 'name' => $name, 'image' => $image, ]); } } }
Um eine Seeder-Klasse ausführen zu können, müssen Sie sie von der DatabaseSeeder-Klasse aus aufrufen. Geben Sie einfach den Namen der Seeder an, die Sie ausführen möchten:
benutze Illuminate \ Database \ Seeder;
class DatabaseSeeder extends Seeder { protected $faker; public function getFaker() { if (empty($this->faker)) { $faker = Faker\Factory::create(); $faker->addProvider(new Faker\Provider\Base($faker)); $faker->addProvider(new Faker\Provider\Lorem($faker)); } return $this->faker = $faker; } public function run() { $this->call(ProductTableSeeder::class); } }
Vergessen Sie nicht, $ composer dump-autoload auszuführen, nachdem Sie den Seeder erstellt haben, da sie nicht automatisch vom Composer geladen werden (es sei denn, Sie erstellen den Seeder mit dem handwerklichen Befehl $ php artisan make:seeder Name )
Jetzt können Sie mit diesem Handwerker-Befehl säen, indem Sie diesen Befehl php artisan db:seed
2) VERWENDUNG von Modellfabriken
Zunächst definieren Sie einen Standardsatz von Attributen für jedes Modell in App/database/factories/ModelFactory.php
Ein Beispiel für ein User-Modell: So sieht eine ModelFactory aus
$factory->define(App\User::class, function (Faker\Generator $faker) {
https://riptutorial.com/de/home 66
return [ 'name' => $faker->name, 'email' => $faker->email, 'password' => bcrypt(str_random(10)), 'remember_token' => str_random(10), ]; });
Erstellen Sie jetzt einen Tabellen-Seeder- php artisan make:seeder UsersTableSeeder
Und füge das hinzu
public function run() { factory(App\User::class, 100)->create() }
Fügen Sie diese dann dem DatabaseSeeder
public function run() { $this->call(UsersTableSeeder::class); }
Dadurch wird die Tabelle mit 100 Datensätzen belegt.
Datenbank Seeding online lesen: https://riptutorial.com/de/laravel/topic/1118/datenbank-seeding
https://riptutorial.com/de/home 67
Kapitel 20: Datenbankmigrationen
Examples
Migrationen
Um Ihre Datenbank in Laravel zu steuern, verwenden Sie Migrationen. Migration mit Handwerker erstellen:
php artisan make:migration create_first_table --create=first_table
Dadurch wird die Klasse CreateFirstTable generiert. Innerhalb der up-Methode können Sie Ihre Spalten erstellen:
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateFirstTable extends Migration { public function up() { Schema::create('first_table', function (Blueprint $table) { $table->increments('id'); $table->string('first_string_column_name'); $table->integer('secont_integer_column_name'); $table->timestamps(); }); } public function down() { Schema::drop('first_table'); } }
Um alle Migrationsklassen auszuführen, können Sie am Ende den Befehl handwerklich ausführen:
php artisan migrate
Dadurch werden Ihre Tabellen und Spalten in Ihrer Datenbank erstellt. Andere nützliche Migrationsbefehle sind:
php artisan migrate:rollback - Rollback der letzten Datenbankmigration•php artisan migrate:reset - Rollback aller Datenbankmigrationen•php artisan migrate:refresh - Alle Migrationen zurücksetzen und erneut ausführen•php artisan migrate:status - Zeigt den Status jeder Migration an•
Vorhandene Tabellen ändern
https://riptutorial.com/de/home 68
Manchmal müssen Sie Ihre vorhandene Tabellenstruktur ändern, z. B. das renaming/deleting Spalten. Was Sie erreichen können, indem Sie eine neue Migration erstellen. In der up Methode Ihrer Migration.
//Renaming Column. public function up() { Schema::table('users', function (Blueprint $table) { $table->renameColumn('email', 'username'); }); }
Im obigen Beispiel wird die email column der users table in username . Während der Code unten fällt eine Spalte username von users Tabelle.
Improtant: Für Spalten modifizieren müssen Sie hinzufügen doctrine/dbal Abhängigkeit Projekts composer.json Datei und starten composer update , um Änderungen.
//Droping Column public function up() { Schema::table('users', function (Blueprint $table) { $table->dropColumn('username'); }); }
Die Migrationsdateien
Migrationen in einer Laravel 5-Anwendung befinden sich im database/migrations . Ihre Dateinamen entsprechen einem bestimmten Format:
<year>_<month>_<day>_<hour><minute><second>_<name>.php
Eine Migrationsdatei sollte eine Schemaaktualisierung darstellen, um ein bestimmtes Problem zu lösen. Zum Beispiel:
2016_07_21_134310_add_last_logged_in_to_users_table.php
Datenbankmigrationen werden in chronologischer Reihenfolge gespeichert, sodass Laravel weiß, in welcher Reihenfolge sie ausgeführt werden sollen. Laravel führt immer Migrationen vom ältesten zum neuesten durch.
Migrationsdateien generieren
Das Erstellen einer neuen Migrationsdatei mit dem korrekten Dateinamen jedes Mal, wenn Sie Ihr Schema ändern müssen, wäre eine Aufgabe. Glücklicherweise kann der artisan Befehl von Laravel die Migration für Sie generieren:
php artisan make:migration add_last_logged_in_to_users_table
https://riptutorial.com/de/home 69
Sie können auch die --table und --create mit dem obigen Befehl verwenden. Diese sind optional und dienen nur der Bequemlichkeit. Sie fügen den entsprechenden Code für die Druckspeicher in die Migrationsdatei ein.
php artisan make:migration add_last_logged_in_to_users_table --table=users php artisan make:migration create_logs_table --create=logs
Sie können mit der Option --path einen benutzerdefinierten Ausgabepfad für die generierte Migration --path . Der Pfad ist relativ zum Basispfad der Anwendung.
php artisan make:migration --path=app/Modules/User/Migrations
Innerhalb einer Datenbankmigration
Jede Migration sollte eine up() Methode und eine down() Methode haben. Der Zweck der up() -Methode besteht darin, die erforderlichen Operationen auszuführen, um das Datenbankschema in seinen neuen Zustand zu versetzen, und der Zweck der down() -Methode ist es, alle von der up() -Methode ausgeführten Operationen rückgängig zu machen. Um sicherzustellen, dass die down() -Methode Ihre Vorgänge ordnungsgemäß rückgängig macht, ist es äußerst wichtig, dass Sie Änderungen an Datenbankschemas rückgängig machen können.
Eine Beispielmigrationsdatei kann wie folgt aussehen:
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class AddLastLoggedInToUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('users', function (Blueprint $table) { $table->dateTime('last_logged_in')->nullable(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('users', function (Blueprint $table) { $table->dropColumn('last_logged_in'); }); }
https://riptutorial.com/de/home 70
}
Bei der Ausführung dieser Migration generiert Laravel die folgende SQL, die für Ihre Datenbank ausgeführt werden kann:
ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL
Migrationen ausführen
Nach dem Ausführen der Migration werden die Vorgänge auf Ihre Datenbank angewendet.
php artisan migrate
Wenn alles gut lief, wird eine Ausgabe ähnlich der folgenden angezeigt:
Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table
Laravel ist klug genug, wenn Sie Migrationen in der Produktionsumgebung ausführen. Wenn Sie feststellen, dass Sie eine destruktive Migration durchführen (z. B. eine, die eine Spalte aus einer Tabelle entfernt), werden Sie vom php artisan migrate Befehl zur Bestätigung aufgefordert. In Umgebungen mit kontinuierlicher Lieferung ist dies möglicherweise nicht erwünscht. Verwenden --force in diesem Fall das Flag --force , um die Bestätigung zu überspringen:
php artisan migrate --force
Wenn Sie nur Migrationen ausgeführt haben, sind Sie möglicherweise verwirrt, wenn eine migrations in Ihrer Datenbank vorhanden ist. Diese Tabelle verwendet Laravel, um zu verfolgen, welche Migrationen bereits ausgeführt wurden. Wenn Sie den migrate ausgeben, ermittelt Laravel, welche Migrationen noch ausgeführt werden müssen, führt sie dann in chronologischer Reihenfolge aus und aktualisiert die migrations entsprechend.
Sie sollten die migrations niemals manuell bearbeiten, es sei denn, Sie wissen absolut, was Sie tun. Es ist sehr einfach, versehentlich Ihre Datenbank in einem fehlerhaften Zustand zu lassen, in dem Ihre Migrationen fehlschlagen.
Migrationen rückgängig machen
Wenn Sie die letzte Migration, dh den letzten Vorgang, rückgängig machen möchten, können Sie den awesome rollback Befehl verwenden. Denken Sie jedoch daran, dass dieser Befehl nur die letzte Migration rückgängig macht, die möglicherweise mehrere Migrationsdateien enthält
php artisan migrate:rollback
Wenn Sie alle Ihre Anwendungsmigrationen rückgängig machen möchten, können Sie den folgenden Befehl verwenden
https://riptutorial.com/de/home 71
php artisan migrate:reset
Wenn Sie wie ich faul sind und mit einem Befehl zurückrollen und migrieren möchten, können Sie diesen Befehl verwenden
php artisan migrate:refresh php artisan migrate:refresh --seed
Sie können auch die Anzahl der Schritte angeben, die mit der Option step . So wird 1 Schritt zurückgesetzt.
php artisan migrate:rollback --step=1
Datenbankmigrationen online lesen: https://riptutorial.com/de/laravel/topic/1131/datenbankmigrationen
https://riptutorial.com/de/home 72
Kapitel 21: Dienstleistungen
Examples
Einführung
Laravel ermöglicht den Zugriff auf eine Vielzahl von Klassen, die als Services bezeichnet werden. Einige Dienste sind sofort verfügbar, Sie können sie jedoch selbst erstellen.
Ein Dienst kann in mehreren Dateien der Anwendung wie Controller verwendet werden. Stellen wir uns vor, ein Service OurService implementiert eine getNumber() -Methode, die eine Zufallszahl getNumber() :
class SomeController extends Controller { public function getRandomNumber() { return app(OurService::class)->getNumber(); } }
Um einen Service zu erstellen, müssen Sie nur eine neue Klasse erstellen:
# app/Services/OurService/OurService.php <?php namespace App\Services\OurService; class OurService { public function getNumber() { return rand(); } }
Zu diesem Zeitpunkt könnten Sie diesen Dienst bereits in einem Controller verwenden, müssen jedoch jedes Mal ein neues Objekt instanziieren, wenn Sie es benötigen:
class SomeController extends Controller { public function getRandomNumber() { $service = new OurService(); return $service->getNumber(); } public function getOtherRandomNumber() { $service = new OurService(); return $service->getNumber(); }
https://riptutorial.com/de/home 73
}
Daher ist der nächste Schritt die Registrierung Ihres Dienstes im Dienstcontainer . Wenn Sie Ihren Dienst im Dienstcontainer registrieren, müssen Sie nicht jedes Mal ein neues Objekt erstellen, wenn Sie es benötigen.
Um einen Dienst im Dienstcontainer zu registrieren, müssen Sie einen Dienstanbieter erstellen. Dieser Dienstanbieter kann:
Registrieren Sie Ihren Service mit der Registrierungsmethode im Service-Container.1. Injizieren anderer Dienste in Ihren Dienst (Abhängigkeiten) mit der Startmethode2.
Ein Service Provider ist eine Klasse, die die abstrakte Klasse Illuminate\Support\ServiceProvider . Es muss die register() -Methode implementiert werden, um einen Dienst im Dienstcontainer zu registrieren :
# app/Services/OurService/OurServiceServiceProvider.php <?php namespace App\Services\OurService; use Illuminate\Support\ServiceProvider; class OurServiceServiceProvider extends ServiceProvider { public function register() { $this->app->singleton('OurService', function($app) { return new OurService(); }); } }
Alle Dienstanbieter werden in einem Array in config/app.php . Also müssen wir unseren Service Provider in diesem Array registrieren:
return [ ... 'providers' => [ ... App\Services\OurService\OurServiceServiceProvider::class, ... ], ... ];
Wir können jetzt auf unseren Service in einer Steuerung zugreifen. Drei Möglichkeiten:
https://riptutorial.com/de/home 74
Abhängigkeitsspritze:1.
<?php namespace App\Http\Controllers; use App\Services\OurService\OurService; class SomeController extends Controller { public function __construct(OurService $our_service) { dd($our_service->getNumber()); } }
Zugriff über den app() Helfer:2.
<?php namespace App\Http\Controllers; use App\Services\OurService\OurService; class SomeController extends Controller { public function getRandomNumber() { return app('OurService')->getNumber(); } }
Laravel bietet Fassaden, imaginäre Kurse, die Sie in allen Ihren Projekten verwenden können und einen Service widerspiegeln. Um auf Ihren Dienst einfacher zuzugreifen, können Sie eine Fassade erstellen:
<?php namespace App\Http\Controllers; use Randomisator; class SomeController extends Controller { public function getRandomNumber() { return Randomisator::getNumber(); } }
Um eine neue Fassade zu erstellen, müssen Sie eine neue Klasse erstellen, die Illuminate\Support\Facades\Facade . Diese Klasse muss die zur Umsetzung getFacadeAccessor() Methode und gibt den Namen eines Dienstes von einem Service Provider registriert:
# app/Services/OurService/OurServiceFacade.php <?php
https://riptutorial.com/de/home 75
namespace App\Services\OurService; use Illuminate\Support\Facades\Facade; class OurServiceFacade extends Facade { protected static function getFacadeAccessor() { return 'OurService'; } }
Sie müssen Ihre Facade auch in config/app.php :
return [ ... 'aliases' => [ .... 'Randomisator' => App\Services\OurService\OurServiceFacade::class, ], ];
Die Fassade ist jetzt überall in Ihrem Projekt zugänglich.
Wenn Sie von Ihren Ansichten aus auf Ihren Dienst zugreifen möchten, können Sie eine Hilfsfunktion erstellen. Laravel wird mit einigen Helfern ausgeliefert, wie die auth() oder die view() Funktion. Um eine Hilfsfunktion zu erstellen, erstellen Sie eine neue Datei:
# app/Services/OurService/helpers.php if (! function_exists('randomisator')) { /** * Get the available OurService instance. * * @return \App\ElMatella\FacebookLaravelSdk */ function randomisator() { return app('OurService'); } }
Sie müssen diese Datei auch registrieren, jedoch in Ihrer composer.json Datei:
{ ... "autoload": { "files": [ "app/Services/OurService/helpers.php"
https://riptutorial.com/de/home 76
], ... } }
Sie können diesen Helfer jetzt in einer Ansicht verwenden:
<h1>Here is a random number: {{ randomisator()->getNumber() }}</h1>
Dienstleistungen online lesen: https://riptutorial.com/de/laravel/topic/1907/dienstleistungen
https://riptutorial.com/de/home 77
Kapitel 22: Dienstleistungen
Examples
Binden einer Schnittstelle an die Implementierung
In einer Service Provider- register können wir eine Schnittstelle an eine Implementierung binden:
public function register() { App::bind( UserRepositoryInterface::class, EloquentUserRepository::class ); }
Von nun an wird jedes Mal, wenn die App eine Instanz von UserRepositoryInterface , eine neue Instanz von EloquentUserRepository automatisch UserRepositoryInterface :
//this will get back an instance of EloquentUserRepository $repo = App::make( UserRepositoryInterface:class );
Instanz binden
Wir können den Service Container als Registry verwenden, indem wir eine Instanz eines Objekts darin binden und zurückholen, wenn wir es brauchen:
// Create an instance. $john = new User('John'); // Bind it to the service container. App::instance('the-user', $john); // ...somewhere and/or in another class... // Get back the instance $john = App::make('the-user');
Binden eines Singleton an den Service-Container
Wir können eine Klasse als Singleton binden:
public function register() { App::singleton('my-database', function() { return new Database(); }); }
Auf diese Weise wird beim ersten Anfordern einer Instanz von 'my-database' an den Service-Container eine neue Instanz erstellt. Alle aufeinanderfolgenden Anforderungen dieser Klasse
https://riptutorial.com/de/home 78
erhalten die zuerst erstellte Instanz zurück:
//a new instance of Database is created $db = App::make('my-database'); //the same instance created before is returned $anotherDb = App::make('my-database');
Einführung
Der Service Container ist das Hauptanwendungsobjekt. Es kann als Abhängigkeitsinjektionscontainer und als Registrierung für die Anwendung verwendet werden, indem Bindungen in den Dienstanbietern definiert werden
Service Provider sind Klassen, in denen definiert wird, wie unsere Serviceklassen über die Anwendung erstellt werden, ihre Konfiguration booten und Schnittstellen an Implementierungen binden
Dienste sind Klassen, die eine oder mehrere logisch korrelierte Aufgaben zusammenfassen
Verwenden des Service-Containers als Abhängigkeitsinjektionscontainer
Wir können den Service Container als Dependency Injection Container verwenden, indem wir den Erstellungsprozess von Objekten mit ihren Abhängigkeiten an einem Punkt der Anwendung binden
Nehmen wir an, die Erstellung eines PdfCreator benötigt zwei Objekte als Abhängigkeiten. Jedes Mal, wenn wir eine Instanz von PdfCreator , sollten wir diese Abhängigkeiten an den Konstruktor übergeben. Durch die Verwendung des Service-Containers als DIC definieren wir die Erstellung von PdfCreator in der Bindungsdefinition, wobei die erforderliche Abhängigkeit direkt vom Service-Container übernommen wird:
App:bind('pdf-creator', function($app) { // Get the needed dependencies from the service container. $pdfRender = $app->make('pdf-render'); $templateManager = $app->make('template-manager'); // Create the instance passing the needed dependencies. return new PdfCreator( $pdfRender, $templateManager ); });
Um in jedem Punkt unserer App einen neuen PdfCreator , können wir einfach PdfCreator tun:
$pdfCreator = App::make('pdf-creator');
Und der Service-Container erstellt eine neue Instanz mit den für uns erforderlichen Abhängigkeiten.
Dienstleistungen online lesen: https://riptutorial.com/de/laravel/topic/1908/dienstleistungen
https://riptutorial.com/de/home 79
Kapitel 23: Domainübergreifende Anfrage
Examples
Einführung
Manchmal benötigen wir eine domänenübergreifende Anforderung für unsere APIs in laravel. Wir müssen geeignete Header hinzufügen, um die domänenübergreifende Anforderung erfolgreich abzuschließen. Daher müssen wir sicherstellen, dass die von uns hinzugefügten Header genau sind, andernfalls werden unsere APIs anfällig. Um Header hinzufügen zu können, müssen Sie Middleware in Laravel hinzufügen, um die entsprechenden Header hinzuzufügen und die Anfragen weiterzuleiten.
CorsHeaders
<?php namespace laravel\Http\Middleware; class CorsHeaders { /** * This must be executed _before_ the controller action since _after_ middleware isn't executed when exceptions are thrown and caught by global handlers. * * @param $request * @param \Closure $next * @param string [$checkWhitelist] true or false Is a string b/c of the way the arguments are supplied. * @return mixed */ public function handle($request, \Closure $next, $checkWhitelist = 'true') { if ($checkWhitelist == 'true') { // Make sure the request origin domain matches one of ours before sending CORS response headers. $origin = $request->header('Origin'); $matches = []; preg_match('/^(https?:\/\/)?([a-zA-Z\d]+\.)*(?<domain>[a-zA-Z\d-\.]+\.[a-z]{2,10})$/', $origin, $matches); if (isset($matches['domain']) && in_array($matches['domain'], ['yoursite.com']) { header('Access-Control-Allow-Origin: ' . $origin); header('Access-Control-Expose-Headers: Location'); header('Access-Control-Allow-Credentials: true'); // If a preflight request comes then add appropriate headers if ($request->method() === 'OPTIONS') { header('Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS, DELETE, PATCH'); header('Access-Control-Allow-Headers: ' . $request->header('Access-Control-Request-Headers')); // 20 days header('Access-Control-Max-Age: 1728000'); }
https://riptutorial.com/de/home 80
} } else { header('Access-Control-Allow-Origin: *'); } return $next($request); } }
Domainübergreifende Anfrage online lesen: https://riptutorial.com/de/laravel/topic/7425/domainubergreifende-anfrage
https://riptutorial.com/de/home 81
Kapitel 24: Einführung in Laravel-5.2
Einführung
Laravel ist ein MVC-Framework mit Bundles, Migrationen und Artisan CLI. Laravel bietet ein robustes Set an Tools und eine Anwendungsarchitektur, die viele der besten Funktionen von Frameworks wie CodeIgniter, Yii, ASP.NET MVC, Ruby on Rails, Sinatra und anderen enthält. Laravel ist ein Open Source Framework. Es verfügt über eine Vielzahl an Funktionen, die die Webentwicklung beschleunigen. Wenn Sie sich mit Core PHP und Advanced PHP auskennen, erleichtert Ihnen Laravel Ihre Aufgabe. Das spart viel Zeit.
Bemerkungen
In diesem Abschnitt erhalten Sie einen Überblick darüber, was Laravel-5.1 ist und warum ein Entwickler es verwenden möchte.
Es sollte auch alle großen Themen in Laravel-5.1 erwähnen und auf die verwandten Themen verweisen. Da die Dokumentation für laravel-5.1 neu ist, müssen Sie möglicherweise erste Versionen dieser verwandten Themen erstellen.
Examples
Installation oder Setup
Anweisungen zur Installation von Laravel 5.1 auf einem Linux / Mac / Unix-Computer.
Überprüfen Sie vor dem Starten der Installation, ob die folgenden Voraussetzungen erfüllt sind:
PHP> = 5.5.9•OpenSSL PHP Extension•PDO PHP-Erweiterung•Mbstring PHP Extension•Tokenizer PHP-Erweiterung•
Beginnen wir mit der Installation:
Composer installieren Komponistendokumentation1. composer create-project laravel/laravel <folder-name> "5.1.*"2. Stellen Sie sicher, dass der storage und der bootstrap/cache Ordner beschreibbar sind.3. Öffnen Sie die .env Datei und legen Sie die Konfigurationsinformationen wie Datenbank-Anmeldeinformationen, Debug-Status, Anwendungsumgebung usw. fest.
4.
Führen Sie den php artisan serve und richten Sie Ihren Browser auf http://localhost:8000 . Wenn alles in Ordnung ist, solltest du die Seite bekommen
5.
Installieren Sie das Laravel 5.1 Framework auf Ubuntu 16.04, 14.04 und
https://riptutorial.com/de/home 82
LinuxMint
Schritt 1 - Installieren Sie die LAMPE
Um mit Laravel zu beginnen, müssen Sie zunächst einen laufenden LAMP-Server einrichten. Wenn Sie bereits LAMP-Stack ausgeführt haben, überspringen Sie diesen Schritt. Verwenden Sie die folgenden Befehle, um die Lampe auf dem Ubuntu-System einzurichten.
Installieren Sie PHP 5.6
$ sudo apt-get install python-software-properties $ sudo add-apt-repository ppa:ondrej/php $ sudo apt-get update $ sudo apt-get install -y php5.6 php5.6-mcrypt php5.6-gd
Installieren Sie Apache2
$ apt-get install apache2 libapache2-mod-php5
Installieren Sie MySQL
$ apt-get install mysql-server php5.6-mysql
Schritt 2 - Installieren Sie Composer
Composer ist für die Installation von Laravel-Abhängigkeiten erforderlich. Verwenden Sie daher die folgenden Befehle zum Herunterladen und Verwenden als Befehl in unserem System.
$ curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer $ sudo chmod +x /usr/local/bin/composer
Schritt 3 - Installieren Sie Laravel
Um die neueste Version von Laravel herunterzuladen, verwenden Sie den folgenden Befehl, um das Master-Repo von Laravel aus Github zu kopieren.
$ cd /var/www $ git clone https://github.com/laravel/laravel.git
Navigieren Sie zum Laravel-Codeverzeichnis und installieren Sie mit Composer alle für das Laravel-Framework erforderlichen Abhängigkeiten.
$ cd /var/www/laravel $ sudo composer install
Die Installation von Abhängigkeiten dauert einige Zeit. Danach legen Sie die richtigen Berechtigungen für Dateien fest.
https://riptutorial.com/de/home 83
$ chown -R www-data.www-data /var/www/laravel $ chmod -R 755 /var/www/laravel $ chmod -R 777 /var/www/laravel/app/storage
Schritt 4 - Legen Sie den Verschlüsselungsschlüssel fest
Legen Sie nun den 32-Bit-Zufallszahlen-Verschlüsselungsschlüssel fest, den der Illuminate-Verschlüsselungsdienst verwendet.
$ php artisan key:generate Application key [uOHTNu3Au1Kt7Uloyr2Py9blU0J5XQ75] set successfully.
Bearbeiten config/app.php Konfigurationsdatei config/app.php und aktualisieren Sie den generierten Anwendungsschlüssel wie folgt. Stellen Sie außerdem sicher, dass die Verschlüsselung richtig eingestellt ist.
'key' => env('APP_KEY', 'uOHTNu3Au1Kt7Uloyr2Py9blU0J5XQ75'), 'cipher' => 'AES-256-CBC',
Schritt 5 - Erstellen Sie Apache VirtualHost
Fügen Sie nun in Ihrer Apache-Konfigurationsdatei einen virtuellen Host hinzu, um über das Webbrowser auf das Laravel-Framework zuzugreifen. Erstellen Sie die Apache-Konfigurationsdatei im Verzeichnis /etc/apache2/sites-available/ und fügen Sie den folgenden Inhalt hinzu.
$ vim /etc/apache2/sites-available/laravel.example.com.conf
Dies ist die Dateistruktur des virtuellen Hosts.
<VirtualHost *:80> ServerName laravel.example.com DocumentRoot /var/www/laravel/public <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/laravel> AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Schließlich können Sie die Website aktivieren und den Apache-Dienst mit dem folgenden Befehl erneut laden.
https://riptutorial.com/de/home 84
$ a2ensite laravel.example.com $ sudo service apache2 reload
Schritt 6 - Greifen Sie auf Laravel zu
Zu diesem Zeitpunkt haben Sie das Laravel 5 PHP-Framework auf Ihrem System erfolgreich abgeschlossen. Machen Sie nun eine Hostdatei, um auf Ihre Laravel-Anwendung im Webbrowser zuzugreifen. Ändern Sie 127.0.0.1 mit Ihrem Server ip und laravel.example.com mit Ihrem in Apache konfigurierten Domänennamen.
$ sudo echo "127.0.0.1 laravel.example.com" >> /etc/hosts
Greifen Sie auf http://laravel.example.com in Ihrem bevorzugten Webbrowser wie folgt zu.
Einführung in Laravel-5.2 online lesen: https://riptutorial.com/de/laravel/topic/1987/einfuhrung-in-laravel-5-2
https://riptutorial.com/de/home 85
Kapitel 25: Einführung in Laravel-5.3
Einführung
Neue Funktionen, Verbesserungen und Änderungen von Laravel 5.2 zu 5.3
Examples
Die Variable $ loop
Seit einiger Zeit ist bekannt, dass der Umgang mit Schleifen in Blade begrenzt ist. Ab 5.3 steht eine Variable namens $loop Verfügung
@foreach($variables as $variable) // Within here the `$loop` variable becomes available // Current index, 0 based $loop->index; // Current iteration, 1 based $loop->iteration; // How many iterations are left for the loop to be complete $loop->remaining; // Get the amount of items in the loop $loop->count; // Check to see if it's the first iteration ... $loop->first; // ... Or last iteration $loop->last; //Depth of the loop, ie if a loop within a loop the depth would be 2, 1 based counting. $loop->depth; // Get's the parent `$loop` if the loop is nested, else null $loop->parent; @endforeach
Einführung in Laravel-5.3 online lesen: https://riptutorial.com/de/laravel/topic/9231/einfuhrung-in-laravel-5-3
https://riptutorial.com/de/home 86
Kapitel 26: Eloquent: Accessors & Mutators
Einführung
Mithilfe von Accessoren und Mutatoren können Sie Eloquent-Attributwerte formatieren, wenn Sie sie für Modellinstanzen abrufen oder festlegen. Beispielsweise möchten Sie den Laravel-Verschlüsseler verwenden, um einen Wert zu verschlüsseln, während er in der Datenbank gespeichert ist, und das Attribut dann automatisch zu entschlüsseln, wenn Sie auf ein Eloquent-Modell zugreifen. Neben benutzerdefinierten Accessoren und Mutatoren kann Eloquent Datumsfelder automatisch in Carbon-Instanzen oder sogar Textfelder in JSON umwandeln.
Syntax
setze {ATTRIBUTE} Attribut ($ -Attribut) // im Kamelfall•
Examples
Definieren eines Accessors
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * Get the user's first name. * * @param string $value * @return string */ public function getFirstNameAttribute($value) { return ucfirst($value); } }
Accessor bekommen:
Wie Sie sehen, wird der ursprüngliche Wert der Spalte an den Accessor übergeben, sodass Sie den Wert bearbeiten und zurückgeben können. Um auf den Wert des Accessors zuzugreifen, können Sie einfach auf das first_name Attribut einer Modellinstanz zugreifen:
$user = App\User::find(1); $firstName = $user->first_name;
https://riptutorial.com/de/home 87
Mutator definieren
class User extends Model { public function setPasswordAttribute($password) { $this->attributes['password'] = bcrypt($password); } ... }
Mit dem obigen Code wird jedes Mal "verschlüsselt", wenn die Kennworteigenschaft festgelegt wird.
$user = $users->first(); $user->password = 'white rabbit'; //laravel calls mutator on background $user->save(); // password is bcrypted and one does not need to call bcrypt('white rabbit')
Eloquent: Accessors & Mutators online lesen: https://riptutorial.com/de/laravel/topic/8305/eloquent--accessors--amp--mutators
https://riptutorial.com/de/home 88
Kapitel 27: Eloquent: Beziehung
Examples
Fragen zu Beziehungen abfragen
Mit Eloquent können Sie auch nach definierten Beziehungen abfragen, wie unten gezeigt:
User::whereHas('articles', function (Builder $query) { $query->where('published', '!=', true); })->get();
Dies setzt voraus, dass der Name Ihrer Beziehungsmethode in diesem Fall articles ist. Das in die Schließung übergebene Argument ist der Query Builder für das zugehörige Modell. Sie können hier also jede andere Abfrage verwenden.
Eifriges Laden
Angenommen, das Benutzermodell hat eine Beziehung zum Artikelmodell und Sie möchten die zugehörigen Artikel gerne laden. Dies bedeutet, dass die Artikel des Benutzers geladen werden, während der Benutzer abgerufen wird.
articles ist der Beziehungsname (Methode) im Benutzermodell.
User::with('articles')->get();
wenn Sie mehrere Beziehungen haben. zum Beispiel Artikel und Beiträge.
User::with('articles','posts')->get();
und geschachtelte Beziehungen auswählen
User::with('posts.comments')->get();
Rufen Sie mehr als eine verschachtelte Beziehung an
User::with('posts.comments.likes')->get()
Verwandte Modelle einfügen
Angenommen, Sie haben ein Post Modell mit einer hasMany Beziehung zu Comment . Sie können ein Comment Objekt einfügen, das sich auf einen Beitrag bezieht, indem Sie folgende Schritte Comment :
$post = Post::find(1); $commentToAdd = new Comment(['message' => 'This is a comment.']);
https://riptutorial.com/de/home 89
$post->comments()->save($commentToAdd);
Sie können mit der saveMany Funktion mehrere Modelle gleichzeitig saveMany :
$post = Post::find(1); $post->comments()->saveMany([ new Comment(['message' => 'This a new comment']), new Comment(['message' => 'Me too!']), new Comment(['message' => 'Eloquent is awesome!']) ]);
Alternativ gibt es auch eine create Methode, die ein einfaches PHP-Array anstelle einer Eloquent-Modellinstanz akzeptiert.
$post = Post::find(1); $post->comments()->create([ 'message' => 'This is a new comment message' ]);
Einführung
Eloquente Beziehungen werden als Funktionen in Ihren Eloquent-Modellklassen definiert. Da Beziehungen wie Eloquent-Modelle selbst auch als leistungsstarke Abfrageersteller dienen, bietet das Definieren von Beziehungen als Funktionen leistungsstarke Methoden zur Verkettung und Abfrage von Methoden. Zum Beispiel können wir zusätzliche Einschränkungen für diese Beitragsbeziehung verketten:
$user->posts()->where('active', 1)->get();
Navigieren Sie zum übergeordneten Thema
Beziehungstypen
Eins zu vielen
Nehmen wir an, dass jeder Beitrag einen oder mehrere Kommentare haben kann und jeder Kommentar zu einem einzigen Beitrag gehört.
so wird die Kommentartabelle post_id . In diesem Fall sind die Beziehungen wie folgt.
Post Model
public function comments() { return $this->belongsTo(Post::class); }
https://riptutorial.com/de/home 90
Wenn der Fremdschlüssel nicht post_id , lautet der example_post_id .
public function comments() { return $this->belongsTo(Post::class, 'example_post_id'); }
und, wenn der lokale Schlüssel anders als id , ist beispielsweise der lokale Schlüssel other_id
public function comments() { return $this->belongsTo(Post::class, 'example_post_id', 'other_id'); }
Kommentarmodell
Umkehrung von eins zu vielen definieren
public function post() { return $this->hasMany(Comment::class); }
Eins zu eins
Zuordnung zwischen zwei Modellen (Beispiel: User und Phone )
App\User
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * Get the phone record associated with the user. */ public function phone() { return $this->hasOne('Phone::class', 'foreign_key', 'local_key'); } }
App\Phone
<?php namespace App; use Illuminate\Database\Eloquent\Model;
https://riptutorial.com/de/home 91
class Phone extends Model { /** * Get the user that owns the phone. */ public function user() { return $this->belongsTo('User::class', 'foreign_key', 'local_key'); } }
foreign_key : Standardmäßig geht Eloquent davon aus, dass es sich um other_model_name_id (in diesem Fall user_id und phone_id ). Ändern Sie ihn, falls dies nicht der Fall ist.
local_key : Eloquent geht standardmäßig davon aus, dass es sich um eine id (aktuelles Modell-Primärschlüssel) handelt. Ändern Sie ihn, falls dies nicht der Fall ist.
Wenn der Name Ihrer Datenbank gemäß dem Laravel-Standard abgelegt wurde, müssen Sie bei der Beziehungsdeklaration keinen Fremdschlüssel und keinen lokalen Schlüssel angeben
Erläuterung
Viel zu viel
Nehmen wir an, es gibt Rollen und Berechtigungen. Jede Rolle kann zu vielen Berechtigungen gehören und jede Berechtigung kann zu vielen Rollen gehören. also gibt es 3 tische. zwei Modelle und ein Pivot-Tisch. eine roles , users und permission_role .
Vorbild
public function permissions() { return $this->belongsToMany(Permission::class); }
Zulassungsmodell
public function roles() { return $this->belongsToMany(Roles::class); }
Anmerkung 1
Beachten Sie Folgendes, wenn Sie einen anderen Tabellennamen für die Pivot-Tabelle verwenden.
Angenommen, Sie möchten role_permission anstelle von permission_role , da eloquent die alphabetische Reihenfolge zum role_permission der Pivot-Schlüsselnamen verwendet. Als zweiten
https://riptutorial.com/de/home 92
Parameter müssen Sie den Namen der Pivot-Tabelle wie folgt übergeben.
Vorbild
public function permissions() { return $this->belongsToMany(Permission::class, 'role_permission'); }
Zulassungsmodell
public function roles() { return $this->belongsToMany(Roles::class, 'role_permission'); }
Anmerkung 2
Beachten Sie Folgendes, wenn Sie unterschiedliche Schlüsselnamen in der Pivot-Tabelle verwenden.
Eloquent geht davon aus, dass, wenn keine Schlüssel als dritter und vierter Parameter übergeben werden, es die singulären Tabellennamen mit _id . Es wird also davon role_id dass der Drehpunkt die Felder role_id und permission_id . Wenn andere Schlüssel als diese verwendet werden sollen, sollten sie als dritter und vierter Parameter übergeben werden.
Sagen wir, wenn other_role_id anstelle von role_id und other_permission_id anstelle von permission_id verwendet werden soll. Es wäre also wie folgt.
Vorbild
public function permissions() { return $this->belongsToMany(Permission::class, 'role_permission', 'other_role_id', 'other_permission_id'); }
Zulassungsmodell
public function roles() { return $this->belongsToMany(Roles::class, 'role_permission', 'other_permission_id', 'other_role_id'); }
Polymorph
Durch polymorphe Beziehungen kann ein Modell zu mehr als einem anderen Modell in einer einzelnen Assoziation gehören. Ein gutes Beispiel wären Bilder, sowohl ein Benutzer als auch ein Produkt können ein Bild haben. Die Tabellenstruktur könnte folgendermaßen aussehen:
https://riptutorial.com/de/home 93
user id - integer name - string email - string product id - integer title - string SKU - string image id - integer url - string imageable_id - integer imageable_type - string
Die wichtigsten zu betrachtenden Spalten befinden sich in der Bildtabelle. Die Spalte mit dem Namen " imageable_id " enthält den ID-Wert des Benutzers oder des Produkts, während die Spalte mit dem Namen " imageable_type den Klassennamen des Besitzermodells enthält. In Ihren Modellen richten Sie die Beziehungen wie folgt ein:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Image extends Model { /** * Get all of the owning imageable models. */ public function imageable() { return $this->morphTo(); } } class User extends Model { /** * Get all of the user's images. */ public function images() { return $this->morphMany('Image::class', 'imageable'); } } class Product extends Model { /** * Get all of the product's images. */ public function images() { return $this->morphMany('Image::class', 'imageable'); } }
https://riptutorial.com/de/home 94
Sie können den Besitzer einer polymorphen Beziehung auch aus dem polymorphen Modell abrufen, indem Sie auf den Namen der Methode zugreifen, die den Aufruf von morphTo . In unserem Fall ist dies die imageable Methode des Image-Modells. Wir werden also auf diese Methode als dynamische Eigenschaft zugreifen
$image = App\Image::find(1); $imageable = $image->imageable;
Dieses imageable gibt entweder einen Benutzer oder ein Produkt zurück.
Viel zu viel
Nehmen wir an, es gibt Rollen und Berechtigungen. Jede Rolle kann zu vielen Berechtigungen gehören und jede Berechtigung kann zu vielen Rollen gehören. also gibt es 3 tische. zwei Modelle und ein Pivot-Tisch. eine roles , users und permission_role .
Vorbild
public function permissions() { return $this->belongsToMany(Permission::class); }
Zulassungsmodell
public function roles() { return $this->belongsToMany(Roles::class); }
Anmerkung 1
Beachten Sie Folgendes, wenn Sie einen anderen Tabellennamen für die Pivot-Tabelle verwenden.
Angenommen, Sie möchten role_permission anstelle von permission_role , da eloquent die alphabetische Reihenfolge zum role_permission der Pivot-Schlüsselnamen verwendet. Als zweiten Parameter müssen Sie den Namen der Pivot-Tabelle wie folgt übergeben.
Vorbild
public function permissions() { return $this->belongsToMany(Permission::class, 'role_permission'); }
Zulassungsmodell
public function roles()
https://riptutorial.com/de/home 95
{ return $this->belongsToMany(Roles::class, 'role_permission'); }
Anmerkung 2
Beachten Sie Folgendes, wenn Sie unterschiedliche Schlüsselnamen in der Pivot-Tabelle verwenden.
Eloquent geht davon aus, dass, wenn keine Schlüssel als dritter und vierter Parameter übergeben werden, es die singulären Tabellennamen mit _id . Es wird also davon role_id dass der Drehpunkt die Felder role_id und permission_id . Wenn andere Schlüssel als diese verwendet werden sollen, sollten sie als dritter und vierter Parameter übergeben werden.
Sagen wir, wenn other_role_id anstelle von role_id und other_permission_id anstelle von permission_id verwendet werden soll. Es wäre also wie folgt.
Vorbild
public function permissions() { return $this->belongsToMany(Permission::class, 'role_permission', 'other_role_id', 'other_permission_id'); }
Zulassungsmodell
public function roles() { return $this->belongsToMany(Roles::class, 'role_permission', 'other_permission_id', 'other_role_id'); }
Zugriff auf die Zwischentabelle mit withPivot ()
Angenommen, Sie haben eine dritte Spalte " permission_assigned_date " in der Pivot-Tabelle. Standardmäßig sind nur die Modellschlüssel im Pivot-Objekt vorhanden. Um diese Spalte im Abfrageergebnis zu erhalten, müssen Sie den Namen in der Funktion withPivot () hinzufügen.
public function permissions() { return $this->belongsToMany(Permission::class, 'role_permission', 'other_role_id', 'other_permission_id')->withPivot('permission_assigned_date'); }
Anbringen / Abnehmen
Eloquent bietet auch einige zusätzliche Hilfsmethoden, um das Arbeiten mit verwandten Modellen zu erleichtern. Nehmen wir beispielsweise an, ein Benutzer kann viele Rollen haben und eine Rolle kann viele Berechtigungen haben. Um einer Berechtigung eine Rolle zuzuordnen, indem Sie einen Datensatz in die Zwischentabelle einfügen, die die Modelle verbindet, verwenden Sie die
https://riptutorial.com/de/home 96
Methode attach:
$role= App\Role::find(1); $role->permissions()->attach($permissionId);
Beim Anhängen einer Beziehung an ein Modell können Sie auch ein Array zusätzlicher Daten übergeben, die in die Zwischentabelle eingefügt werden sollen:
$rol->roles()->attach($permissionId, ['permission_assigned_date' => $date]);
Um eine bestimmte Berechtigung für eine Rolle zu entfernen, verwenden Sie die Trennungsfunktion
$role= App\Role::find(1); //will remove permission 1,2,3 against role 1 $role->permissions()->detach([1, 2, 3]);
Zuordnungen synchronisieren
Sie können die Synchronisationsmethode auch verwenden, um viele-zu-viele-Verknüpfungen aufzubauen. Die Synchronisationsmethode akzeptiert ein Array von IDs, die in der Zwischentabelle platziert werden sollen. IDs, die sich nicht im angegebenen Array befinden, werden aus der Zwischentabelle entfernt. Nach Abschluss dieses Vorgangs sind also nur die IDs des angegebenen Arrays in der Zwischentabelle vorhanden:
//will keep permission id's 1,2,3 against Role id 1 $role= App\Role::find(1) $role->permissions()->sync([1, 2, 3]);
Eloquent: Beziehung online lesen: https://riptutorial.com/de/laravel/topic/7960/eloquent--beziehung
https://riptutorial.com/de/home 97
Kapitel 28: Eloquent: Modell
Examples
Ein Modell erstellen
Modellerstellung
Modellklassen müssen Illuminate\Database\Eloquent\Model . Der Standardspeicherort für Modelle ist das Verzeichnis /app .
Eine Modellklasse kann leicht mit dem Artisan- Befehl generiert werden:
php artisan make:model [ModelName]
Dadurch wird standardmäßig eine neue PHP-Datei mit dem Namen [ModelName].php in app/ [ModelName].php enthält die gesamte Grundplatte für Ihr neues Modell, einschließlich der Klasse, des Namespaces und der Verwendung, die für eine grundlegende Einrichtung erforderlich sind.
Wenn Sie eine Migrationsdatei zusammen mit Ihrem Modell erstellen möchten, verwenden Sie den folgenden Befehl, wobei -m auch die Migrationsdatei generiert:
php artisan make:model [ModelName] -m
Neben dem Erstellen des Modells wird eine Datenbankmigration erstellt, die mit dem Modell verbunden ist. Die PHP-Datei für die Datenbankmigration befindet sich standardmäßig in der database/migrations/ . Dies schließt standardmäßig keine anderen created_at als die Spalten id und created_at / updated_at müssen Sie die Datei bearbeiten, um zusätzliche Spalten bereitzustellen.
Beachten Sie, dass Sie die Migration ausführen müssen (sobald Sie die Migrationsdatei eingerichtet haben), damit das Modell mithilfe von php artisan migrate vom Projektstamm aus
Wenn Sie später eine Migration hinzufügen möchten, nachdem Sie das Modell erstellt haben, können Sie Folgendes ausführen:
php artisan make:migration [migration name]
Angenommen, Sie möchten ein Modell für Ihre Katzen erstellen, Sie hätten zwei Möglichkeiten, sie mit oder ohne Migration zu erstellen. Sie würden sich für die Erstellung ohne Migration entscheiden, wenn Sie bereits über eine Katzentabelle verfügen oder zu diesem Zeitpunkt keine erstellen möchten.
Für dieses Beispiel möchten wir eine Migration erstellen, da wir noch keine Tabelle haben, also den folgenden Befehl ausführen.
https://riptutorial.com/de/home 98
php artisan make:model Cat -m
Dieser Befehl erstellt zwei Dateien:
Im App-Ordner: app/Cat.php1. Im Datenbankordner: database/migrations/timestamp_creat_cats_table.php2.
Die Datei, an der wir interessiert sind, ist die letztere, da wir über diese Datei entscheiden können, wie die Tabelle aussehen und einschließen soll. Für jede vordefinierte Migration erhalten wir eine automatisch ansteigende ID-Spalte und eine Zeitstempel-Spalte.
Das nachstehende Beispiel eines Extrakts der Migrationsdatei enthält die oben definierten vordefinierten Spalten sowie die Hinzufügung eines Namens der Katze, des Alters und der Farbe:
public function up() { Schema::create('cats', function (Blueprint $table) { $table->increments('id'); //Predefined ID $table->string('name'); //Name $table->integer('age'); //Age $table->string('colour'); //Colour $table->timestamps(); //Predefined Timestamps }); }
Wie Sie sehen, ist es relativ einfach, das Modell und die Migration für eine Tabelle zu erstellen. Um die Migration auszuführen und in Ihrer Datenbank zu erstellen, führen Sie den folgenden Befehl aus:
php artisan migrate
Dadurch werden alle ausstehenden Migrationen in Ihre Datenbank migriert.
Speicherort der Modelldatei
Modelle können dank PSR4 überall gespeichert werden.
Standardmäßig werden Modelle im app Verzeichnis mit dem Namespace App . Für komplexere Anwendungen wird normalerweise empfohlen, Modelle in ihren eigenen Ordnern in einer Struktur zu speichern, die für Ihre Apps-Architektur sinnvoll ist.
Wenn Sie beispielsweise über eine Anwendung Banana.php , die eine Reihe von Früchten als Modelle verwendet, können Sie einen Ordner mit dem Namen app/Fruits erstellen. Banana.php diesem Ordner erstellen Sie Banana.php (unter Beachtung der Namenskonvention von StudlyCase ). Anschließend können Sie die Banana-Klasse erstellen im App\Fruits Namespace:
namespace App\Fruits;
https://riptutorial.com/de/home 99
use Illuminate\Database\Eloquent\Model; class Banana extends Model { // Implementation of "Banana" omitted }
Modellkonfiguration
Eloquent verfolgt einen Ansatz der "Konvention über die Konfiguration". Durch die Erweiterung der Model alle Modelle erben die unten aufgeführten Eigenschaften. Wenn nicht überschrieben, gelten die folgenden Standardwerte:
Eigentum Beschreibung Standard
protected $connection DB-Verbindungsname Standard-DB-Verbindung
protected $table Tabellenname
Standardmäßig wird der Klassenname in " snake_case konvertiert und in eine snake_case umgewandelt. Beispielsweise wird SpecialPerson zu special_people
protected $primaryKey Tabelle PK id
public $incrementing
Gibt an, ob die IDs automatisch inkrementiert werden
true
public $timestamps
Gibt an, ob das Modell mit einem Zeitstempel versehen werden soll
true
const CREATED_AT
Name der Erstellungszeitstempel-Spalte
created_at
const UPDATED_AT
Name der Spalte für den Änderungszeitstempel
updated_at
protected $dates
Attribute, die zusätzlich zu den Zeitstempelattributen zu DateTime mutiert werden sollten
[]
protected $dateFormat
Format, in dem Datumsattribute beibehalten werden
Standard für den aktuellen SQL-Dialekt.
protected $with Beziehungen zur Modellarbeit []
protected $hidden
Attribute wurden bei der Modellserialisierung weggelassen
[]
protected In der Modell-Serialisierung []
https://riptutorial.com/de/home 100
Eigentum Beschreibung Standard
$visible zulässige Attribute
protected $appends
Attribut-Accessoren zur Modell-Serialisierung hinzugefügt
[]
protected $fillable
Attribute, die massenzuweisbar sind
[]
protected $guarded
Attribute, die bei der Massenzuordnung auf der schwarzen Liste stehen
[*] (Alle Attribute)
protected $touches
Die Beziehungen, die berührt werden sollten, werden gespeichert
[]
protected $perPage
Die Anzahl der für die Paginierung zurückzugebenden Modelle.
15
5,0
Eigentum Beschreibung Standard
protected $casts Attribute, die in native Typen umgewandelt werden sollten []
Aktualisieren Sie ein vorhandenes Modell
$user = User::find(1); $user->name = 'abc'; $user->save();
Sie können auch mehrere Attribute gleichzeitig mit update , für das anschließend kein save erforderlich ist:
$user = User::find(1); $user->update(['name' => 'abc', 'location' => 'xyz']);
Sie können ein Modell auch aktualisieren, ohne es vorher abzufragen:
User::where('id', '>', 2)->update(['location' => 'xyz']);
Wenn Sie keine Änderung an der Zeitmarke updated_at des Modells auslösen möchten, können Sie die touch :
$user = User::find(1); $user->update(['name' => 'abc', 'location' => 'xyz'], ['touch' => false]);
Eloquent: Modell online lesen: https://riptutorial.com/de/laravel/topic/7984/eloquent--modell
https://riptutorial.com/de/home 101
Kapitel 29: Entfernen Sie public von URL in Laravel
Einführung
Wie man public von der URL in Laravel entfernt, gibt es viele Antworten im Internet, aber der einfachste Weg wird unten beschrieben
Examples
Wie geht das?
Befolgen Sie diese Schritte, um public von der URL zu entfernen
Kopieren Sie die .htaccess Datei aus dem Verzeichnis /public in den Laravel/project .1. server.php die server.php im server.php Laravel/project in index.php .2.
Prost, du wirst jetzt gut sein.
Bitte beachten Sie: Es wurde an Laravel 4.2 , Laravel 5.1 , Laravel 5.2 , Laravel 5.3 getestet.
Ich denke, dies ist der einfachste Weg, um public von der URL zu entfernen.
Entfernen Sie die Öffentlichkeit aus der URL
Umbenennen der server.php in index.php1. Kopieren Sie die .htaccess aus public Ordner root - Ordner2. .htaccess für Statik wie folgt ändern:3.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
Manchmal habe ich diese Methode zum Entfernen der public Formular-URL verwendet.
Entfernen Sie public von URL in Laravel online lesen: https://riptutorial.com/de/laravel/topic/9786/entfernen-sie-public-von-url-in-laravel
https://riptutorial.com/de/home 102
Kapitel 30: Erste Schritte mit Laravel-5.3
Bemerkungen
In diesem Abschnitt erhalten Sie einen Überblick darüber, was Laravel-5.3 ist und warum ein Entwickler es verwenden möchte.
Es sollte auch alle großen Themen in Laravel-5.3 erwähnen und auf die verwandten Themen verweisen. Da die Dokumentation für laravel-5.3 neu ist, müssen Sie möglicherweise erste Versionen dieser verwandten Themen erstellen.
Examples
Laravel installieren
Bedarf: Auf Ihrem Rechner muss PHP >= 5.6.4 und Composer installiert sein. Sie können die Version von beiden mit dem Befehl überprüfen: Für PHP:
php -v
Ausgabe wie folgt:
PHP 7.0.9 (cli) (built: Aug 26 2016 06:17:04) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
Für Komponist Sie können den Befehl auf Ihrem Terminal / CMD ausführen:
composer --version
Ausgabe wie folgt:
composer version 1.2.1 2016-09-12 11:27:19
Laravel verwendet Composer zum Verwalten seiner Abhängigkeiten. Vergewissern Sie sich daher vor der Verwendung von Laravel, dass Composer auf Ihrem Computer installiert ist.
Über den Laravel Installer
Laden Sie zunächst das Laravel-Installationsprogramm mit Composer herunter:
https://riptutorial.com/de/home 103
composer global require "laravel/installer"
$HOME/.composer/vendor/bin Sie sicher, dass das $HOME/.composer/vendor/bin (oder das entsprechende Verzeichnis für Ihr Betriebssystem) in $ PATH laravel ist, damit die laravel Datei von laravel von Ihrem System gefunden werden kann.
Nach der Installation erstellt der laravel new Befehl laravel new eine neue Laravel-Installation in dem von Ihnen angegebenen Verzeichnis. Zum Beispiel laravel new blog von Laravel ein Verzeichnis mit dem Namen blog das eine neue Laravel-Installation mit allen bereits installierten Abhängigkeiten von Laravel enthält:
laravel new blog
Über Composer Create-Project
Alternativ können Sie Laravel auch installieren, indem Sie den Befehl Composer create-project in Ihrem Terminal ausgeben:
composer create-project --prefer-dist laravel/laravel blog
Konfiguration
Nachdem Sie die Laravel-Installation abgeschlossen haben, müssen Sie die permissions für die Speicher- und Bootstrap-Ordner festlegen.
Hinweis: Das Festlegen von permissions ist einer der wichtigsten Prozesse, die bei der Installation von Laravel ausgeführt werden müssen.
Lokaler Entwicklungsserver
Wenn Sie PHP lokal installiert haben und Sie möchten , dass PHP-internen Entwicklungs - Server verwenden , um Ihre Anwendung zu bedienen, können Sie die Verwendung serve Artisan Befehl. Dieser Befehl startet einen Entwicklungsserver unter http://localhost:8000 :
php artisan serve
Öffnen Sie die Browseranforderungs-URL http://localhost:8000
Serveranforderungen
Das Laravel-Framework hat einige Systemanforderungen. Natürlich werden alle diese Anforderungen von der virtuellen Maschine von Laravel Homestead erfüllt. Daher wird dringend empfohlen, Homestead als lokale Laravel-Entwicklungsumgebung zu verwenden.
Wenn Sie jedoch Homestead nicht verwenden, müssen Sie sicherstellen, dass Ihr Server die folgenden Anforderungen erfüllt:
https://riptutorial.com/de/home 104
PHP> = 5.6.4•OpenSSL PHP Extension•PDO PHP-Erweiterung•Mbstring PHP Extension•Tokenizer PHP-Erweiterung•XML PHP Extension•
Lokaler Entwicklungsserver
Wenn Sie PHP lokal installiert haben und Sie möchten , dass PHP-internen Entwicklungs - Server verwenden , um Ihre Anwendung zu bedienen, können Sie die Verwendung serve Artisan Befehl. Dieser Befehl startet einen Entwicklungsserver unter http://localhost:8000 :
php artisan serve
Natürlich stehen über Homestead und Valet robustere lokale Entwicklungsoptionen zur Verfügung.
Es ist auch möglich, einen benutzerdefinierten Port zu verwenden, etwa 8080 . Sie können dies mit der Option --port tun.
php artisan serve --port=8080
Wenn sich in Ihrer hosts-Datei eine lokale Domäne befindet, können Sie den Hostnamen festlegen. Dies kann mit der Option --host .
php artisan serve --host=example.dev
Sie können auch einen benutzerdefinierten Host und Port ausführen. Dies kann mit dem folgenden Befehl ausgeführt werden.
php artisan serve --host=example.dev --port=8080
Hallo Weltbeispiel (Basic) und mit einer Ansicht
Das grundlegende Beispiel Öffnen routes/web.php Datei routes/web.php und fügen Sie den folgenden Code in die Datei ein:
Route::get('helloworld', function () { return '<h1>Hello World</h1>'; });
" helloworld " fungiert hier als Seitenname, auf den Sie zugreifen möchten.
Wenn Sie keine Blade-Datei erstellen möchten und trotzdem direkt auf die Seite zugreifen möchten, können Sie das Laravel-Routing auf diese Weise verwenden
localhost/helloworld Sie jetzt localhost/helloworld in die Adressleiste des Browsers ein, und Sie
https://riptutorial.com/de/home 105
können auf die Seite zugreifen, die Hello World anzeigt.
Der nächste Schritt. Sie haben also gelernt, eine sehr einfache Hello World zu erstellen! Seite, indem Sie einen Hallo Welt Satz zurücksenden. Aber wir können es ein bisschen schöner machen!
Schritt 1. Wir beginnen jetzt wieder mit unserer Datei routes/web.php , anstatt den Code oben zu verwenden, verwenden wir den folgenden Code:
Route::get('helloworld', function() { return view('helloworld'); });
Der Rückgabewert dieses Mal ist nicht nur ein einfacher Text aus der Welt der helloworld, sondern eine Ansicht. Eine Ansicht in Laravel ist einfach eine neue Datei. Diese Datei "helloworld" enthält den HTML-Code und möglicherweise später sogar etwas PHP des Helloworld-Textes.
Schritt 2. Nun, da wir unsere Route angepasst haben, um eine Ansicht aufzurufen, werden wir die Ansicht erstellen. Laravel arbeitet mit Blade.php-Dateien in Ansichten. In diesem Fall heißt unsere Route helloworld. Daher wird unsere Ansicht helloworld.blade.php
Wir erstellen die neue Datei im Verzeichnis resources/views und nennen sie helloworld.blade.php
Jetzt öffnen wir diese neue Datei und bearbeiten sie, indem wir unseren Hello World-Satz erstellen. Wir können mehrere verschiedene Methoden hinzufügen, um unseren Satz zu erhalten, wie im folgenden Beispiel.
<html> <body> <h1> Hello World! </h1> <?php echo "Hello PHP World!"; ?> </body> </html>
Gehen Sie nun zu Ihrem Browser und geben Sie Ihre Route erneut wie im einfachen Beispiel ein: localhost/helloworld Sie sehen Ihre neu erstellte Ansicht mit allen Inhalten!
Hallo Weltbeispiel (Basic)
Routendatei öffnen Fügen Sie den folgenden Code ein:
Route::get('helloworld', function () { return '<h1>Hello World</h1>'; });
https://riptutorial.com/de/home 106
Nach dem http://localhost/helloworld wird Hello World http://localhost/helloworld .
Die /routes/web.php befindet sich /routes/web.php
Webserver-Konfiguration für hübsche URLs
Wenn Sie Laravel über Composer or the Laravel installer , benötigen Sie nachfolgend die Konfiguration.
Die Konfiguration für Apache Laravel enthält eine public/.htaccess Datei, die dazu verwendet wird, URLs ohne den front-Controller index.php im Pfad bereitzustellen. Aktivieren Sie vor dem Servieren von Laravel mit Apache das Modul mod_rewrite damit die .htaccess Datei vom Server .htaccess wird.
Wenn die mit Laravel gelieferte .htaccess Datei bei Ihrer Apache-Installation nicht funktioniert, versuchen Sie diese Alternative:
Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L]
Konfiguration für Nginx Wenn Sie Nginx verwenden, leitet die folgende Anweisung in Ihrer Site-Konfiguration alle Anforderungen an den Front Controller von index.php :
location / { try_files $uri $uri/ /index.php?$query_string; }
Wenn Sie Homestead oder Valet verwenden , werden natürlich hübsche URLs automatisch konfiguriert.
Erste Schritte mit Laravel-5.3 online lesen: https://riptutorial.com/de/laravel/topic/8602/erste-schritte-mit-laravel-5-3
https://riptutorial.com/de/home 107
Kapitel 31: Fehlerbehandlung
Bemerkungen
Denken Sie daran, Ihre Anwendung für den E-Mail- config/mail.php einzurichten, indem Sie die korrekte Konfiguration von config/mail.php
Überprüfen Sie auch, ob die ENV-Variablen richtig eingestellt sind.
Dieses Beispiel ist ein Leitfaden und ist minimal. Untersuchen, ändern und gestalten Sie die Ansicht wie gewünscht. Passen Sie den Code an Ihre Bedürfnisse an. Legen Sie beispielsweise den Empfänger in Ihrer .env- Datei fest
Examples
Fehlerbericht-E-Mail senden
Ausnahmen in Laravel werden von App \ Exceptions \ Handler.php behandelt
Diese Datei enthält standardmäßig zwei Funktionen. Berichten und Rendern Wir werden nur die erste verwenden
public function report(Exception $e)
Mit der Report-Methode werden Ausnahmen protokolliert oder an einen externen Dienst wie BugSnag gesendet. Standardmäßig übergibt die Berichtsmethode die Ausnahme einfach an die Basisklasse, in der die Ausnahme protokolliert wird. Sie können jedoch Ausnahmen beliebig protokollieren.
Im Wesentlichen leitet diese Funktion den Fehler weiter und tut nichts. Daher können wir eine Geschäftslogik einfügen, um Operationen basierend auf dem Fehler auszuführen. Für dieses Beispiel senden wir eine E-Mail mit den Fehlerinformationen.
public function report(Exception $e) { if ($e instanceof \Exception) { // Fetch the error information we would like to // send to the view for emailing $error['file'] = $e->getFile(); $error['code'] = $e->getCode(); $error['line'] = $e->getLine(); $error['message'] = $e->getMessage(); $error['trace'] = $e->getTrace(); // Only send email reports on production server if(ENV('APP_ENV') == "production"){ #1. Queue email for sending on "exceptions_emails" queue #2. Use the emails.exception_notif view shown below #3. Pass the error array to the view as variable $e
https://riptutorial.com/de/home 108
Mail::queueOn('exception_emails', 'emails.exception_notif', ["e" => $error], function ($m) { $m->subject("Laravel Error"); $m->from(ENV("MAIL_FROM"), ENV("MAIL_NAME")); $m->to("[email protected]", "Webmaster"); }); } } // Pass the error on to continue processing return parent::report($e); }
Die Ansicht für die E-Mail ("emails.exception_notif") befindet sich unten
<?php $action = (\Route::getCurrentRoute()) ? \Route::getCurrentRoute()->getActionName() : "n/a"; $path = (\Route::getCurrentRoute()) ? \Route::getCurrentRoute()->getPath() : "n/a"; $user = (\Auth::check()) ? \Auth::user()->name : 'no login'; ?> There was an error in your Laravel App<br /> <hr /> <table border="1" width="100%"> <tr><th >User:</th><td>{{ $user }}</td></tr> <tr><th >Message:</th><td>{{ $e['message'] }}</td></tr> <tr><th >Action:</th><td>{{ $action }}</td></tr> <tr><th >URI:</th><td>{{ $path }}</td></tr> <tr><th >Line:</th><td>{{ $e['line'] }}</td></tr> <tr><th >Code:</th><td>{{ $e['code'] }}</td></tr> </table>
Anwendungsweite ModelNotFoundException abfangen
app \ Exceptions \ Handler.php
public function render($request, Exception $exception) { if ($exception instanceof ModelNotFoundException) { abort(404); } return parent::render($request, $exception); }
Sie können jede in Laravel geworfene Ausnahme abfangen / behandeln.
Fehlerbehandlung online lesen: https://riptutorial.com/de/laravel/topic/2858/fehlerbehandlung
https://riptutorial.com/de/home 109
Kapitel 32: Formularanforderung (en)
Einführung
Benutzerdefinierte Anforderungen (oder Formularanforderungen) sind in Situationen nützlich, in denen eine Anforderung autorisiert und validiert werden soll, bevor die Controller-Methode ausgeführt wird.
Es gibt zwei praktische Verwendungszwecke: Erstellen und Aktualisieren eines Datensatzes, während für jede Aktion unterschiedliche Validierungs- (oder Berechtigungs-) Regeln gelten.
Die Verwendung von Formularanfragen ist trivial, man muss die Anforderungsklasse in method eingeben.
Syntax
PHP Handwerker make: request name_of_request•
Bemerkungen
Anfragen sind hilfreich, wenn Sie Ihre Validierung vom Controller trennen. Sie können auch überprüfen, ob die Anforderung autorisiert ist.
Examples
Anfragen erstellen
php artisan make:request StoreUserRequest php artisan make:request UpdateUserRequest
Hinweis : Sie können auch die Verwendung von Namen wie StoreUser oder UpdateUser (ohne Anhang " Request" ) in Betracht ziehen, da sich Ihre FormRequests im Ordner app/Http/Requests/ Http app/Http/Requests/ .
Formularanforderung verwenden
Nehmen wir an, wir fahren mit dem Anwenderbeispiel fort (möglicherweise verfügen Sie über einen Controller mit Speichermethode und Aktualisierungsmethode). Um FormRequests zu verwenden, verwenden Sie Typanweisungen für die jeweilige Anforderung.
... public function store(App\Http\Requests\StoreRequest $request, App\User $user) { //by type-hinting the request class, Laravel "runs" StoreRequest
https://riptutorial.com/de/home 110
//before actual method store is hit //logic that handles storing new user //(both email and password has to be in $fillable property of User model $user->create($request->only(['email', 'password'])); return redirect()->back(); } ... public function update(App\Http\Requests\UpdateRequest $request, App\User $users, $id) { //by type-hinting the request class, Laravel "runs" UpdateRequest //before actual method update is hit //logic that handles updating a user //(both email and password has to be in $fillable property of User model $user = $users->findOrFail($id); $user->update($request->only(['password'])); return redirect()->back(); }
Umleitungen nach der Validierung behandeln
Manchmal möchten Sie sich anmelden, um zu bestimmen, wohin der Benutzer nach dem Senden eines Formulars weitergeleitet wird. Formularanfragen bieten verschiedene Möglichkeiten.
Standardmäßig sind 3 Variablen in der Request $redirect , $redirectRoute und $redirectAction deklariert.
getRedirectUrl() diesen 3 Variablen können Sie den Main-Redirect-Handler getRedirectUrl() .
Nachstehend finden Sie eine Musteranfrage, in der beschrieben wird, was Sie tun können.
<?php namespace App; use Illuminate\Foundation\Http\FormRequest as Request; class SampleRequest extends Request { // Redirect to the given url public $redirect; // Redirect to a given route public $redirectRoute; // Redirect to a given action public $redirectAction; /** * Get the URL to redirect to on a validation error. * * @return string */ protected function getRedirectUrl() {
https://riptutorial.com/de/home 111
// If no path is given for `url()` it will return a new instance of `Illuminate\Routing\UrlGenerator` // If your form is down the page for example you can redirect to a hash return url()->previous() . '#contact'; //`url()` provides several methods you can chain such as // Get the current URL return url()->current(); // Get the full URL of the current request return url()->full(); // Go back return url()->previous(); // Or just redirect back return redirect()->back(); } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return []; } /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } }
Formularanforderung (en) online lesen: https://riptutorial.com/de/laravel/topic/6329/formularanforderung--en-
https://riptutorial.com/de/home 112
Kapitel 33: Genehmigung
Einführung
Laravel bietet eine einfache Möglichkeit, Benutzeraktionen für bestimmte Ressourcen zu autorisieren. Mit der Berechtigung können Sie Benutzern gezielt Zugriff auf bestimmte Ressourcen gewähren und anderen Benutzern den Zugriff verweigern. Laravel bietet eine einfache API zum Verwalten von Benutzerautorisierungen mithilfe von Gates und Policies . Gates bieten einen einfachen AuthServiceProvider Ansatz für die Autorisierung mit dem AuthServiceProvider Policies können Sie die Autorisierungslogik anhand von Klassen um Modelle herum organisieren.
Examples
Gates verwenden
Gates sind Schließungen, die bestimmen, ob ein Benutzer eine bestimmte Aktion für eine Ressource ausführen darf. Gates werden in der Regel in der Boot-Methode von AuthServiceProvider und kurz benannt, um AuthServiceProvider , was sie tun. Ein Beispiel für ein Gate, das nur Premium-Benutzern die Anzeige bestimmter Inhalte ermöglicht, sieht folgendermaßen aus:
Gate::define('view-content', function ($user, $content){ return $user->isSubscribedTo($content->id); });
Ein Gate erhält immer eine Benutzerinstanz als erstes Argument. Sie müssen es nicht übergeben, wenn Sie das Gate verwenden. Optional können Sie zusätzliche Argumente wie das betreffende eloquente Modell erhalten.
Aktionen mit Gates autorisieren
Um das Beispiel oben für eine Blade-Vorlage zu verwenden, um den Inhalt für den Benutzer auszublenden, führen Sie normalerweise Folgendes aus:
@can('view-content', $content) <! -- content here --> @endcan
Um die Navigation zum Inhalt vollständig zu verhindern, können Sie in Ihrem Controller Folgendes ausführen:
if(Gate::allows('view-content', $content)){ /* user can view the content */ } OR
https://riptutorial.com/de/home 113
if(Gate::denies('view-content', $content)){ /* user cannot view content */ }
Hinweis: Sie müssen den aktuell authentifizierten Benutzer nicht an diese Methode übergeben. Laravel übernimmt dies für Sie.
Richtlinien
Richtlinien sind Klassen, mit deren Hilfe Sie die Autorisierungslogik um eine Modellressource herum organisieren können. In unserem vorherigen Beispiel verfügen wir möglicherweise über eine ContentPolicy , die den Benutzerzugriff auf das Content Modell verwaltet.
Um ContentPolicy zu ContentPolicy , bietet laravel einen handwerklichen Befehl. Einfach laufen
php artisan make:policy ContentPolicy
Dadurch wird eine leere Richtlinienklasse erstellt und im Ordner app/Policies abgelegt. Wenn der Ordner nicht vorhanden ist, erstellt Laravel ihn und platziert die Klasse darin.
Nach der Erstellung müssen Richtlinien registriert werden, damit Laravel wissen kann, welche Richtlinien beim Autorisieren von Aktionen für Modelle verwendet werden sollen. Der AuthServiceProvider Laravel, der mit allen neuen Laravel-Installationen AuthServiceProvider wird, verfügt über eine Richtlinieneigenschaft, die Ihre eloquenten Modelle ihren Autorisierungsrichtlinien zuordnet. Alles, was Sie tun müssen, um die Zuordnung zum Array hinzuzufügen.
protected $policies = [ Content::class => ContentPolicy::class, ];
Richtlinien schreiben
Das Schreiben von Policies folgt im Wesentlichen dem Schreiben von Gates . Das Inhaltsgenehmigungsfenster kann als Richtlinie wie folgt umgeschrieben werden:
function view($user, $content) { return $user->isSubscribedTo($content->id); }
Richtlinien können bei Bedarf mehr Methoden enthalten, um alle Autorisierungsfälle für ein Modell zu bearbeiten.
Aktionen mit Richtlinien autorisieren
Über das Benutzermodell
Das Laravel-Benutzermodell enthält zwei Methoden, die bei der Autorisierung mithilfe von Policies
https://riptutorial.com/de/home 114
hilfreich sind. can und can't Diese beiden können verwendet werden, um zu bestimmen, ob ein Benutzer jeweils eine Berechtigung für ein Modell hat oder nicht.
Um zu überprüfen, ob ein Benutzer einen Inhalt anzeigen kann oder nicht, können Sie Folgendes tun:
if($user->can('view', $content)){ /* user can view content */ } OR if($user->cant('view', $content)){ /* user cannot view content */ }
Über Middleware
Route::get('/contents/{id}, function(Content $content){ /* user can view content */ })->middleware('can:view,content');
Über Controller
Laravel liefert eine Hilfsmethode, genannt authorize , die den Namen der Politik und der damit verbundenen Modell als Argumente übernimmt, und entweder autorisiert die Aktion auf der Grundlage Ihrer Berechtigungslogik oder verweigert die Aktion und wirft einen AuthorizationException , die die Laravel Exception - Handler zu einem wandelt 403 HTTP response .
pubic function show($id) { $content = Content::find($id); $this->authorize('view', $content); /* user can view content */ }
Genehmigung online lesen: https://riptutorial.com/de/laravel/topic/9360/genehmigung
https://riptutorial.com/de/home 115
Kapitel 34: Handwerker
Syntax
PHP-Handwerker [Befehl] [Optionen] [Argumente]•
Parameter
Befehl Beschreibung
übersichtlich zusammengestellt
Entfernen Sie die kompilierte Klassendatei
Nieder Versetzen Sie die Anwendung in den Wartungsmodus
env Zeigt die aktuelle Rahmenumgebung an
Hilfe Zeigt die Hilfe für einen Befehl an
Liste Listet Befehle auf
Wandern Führen Sie die Datenbankmigrationen aus
optimieren Optimieren Sie den Rahmen für eine bessere Leistung
Dienen Serve die Anwendung auf dem PHP-Entwicklungsserver
basteln Interagieren Sie mit Ihrer Bewerbung
oben Bringen Sie die Anwendung aus dem Wartungsmodus
App Name Legen Sie den Anwendungsnamespace fest
auth: clear-resetsDie abgelaufenen Token für das Zurücksetzen des Kennworts werden gelöscht
Cache: löschen Leeren Sie den Anwendungscache
Cache: Tabelle Erstellen Sie eine Migration für die Cache-Datenbanktabelle
config: cacheErstellen Sie eine Cache-Datei, um das Laden der Konfiguration zu beschleunigen
config: klar Entfernen Sie die Konfigurationscache-Datei
db: Samen Seed die Datenbank mit Datensätzen
Generieren Sie die fehlenden Ereignisse und Listener Ereignis: generieren
https://riptutorial.com/de/home 116
Befehl Beschreibung
basierend auf der Registrierung
Schlüssel: generieren Legen Sie den Anwendungsschlüssel fest
machen: authGrundlegende Anmelde- und Registrierungsansichten und Routen für Scaffold
machen: Konsole Erstellen Sie einen neuen Artisan-Befehl
machen: Controller Erstellen Sie eine neue Controller-Klasse
machen: event Erstellen Sie eine neue Ereignisklasse
machen: job Erstellen Sie eine neue Jobklasse
machen: Zuhörer Erstellen Sie eine neue Ereignis-Listener-Klasse
machen: Middleware Erstellen Sie eine neue Middleware-Klasse
machen: Migration Erstellen Sie eine neue Migrationsdatei
machen: modell Erstellen Sie eine neue Eloquent-Modellklasse
machen: Politik Erstellen Sie eine neue Richtlinienklasse
machen: Anbieter Erstellen Sie eine neue Service Provider-Klasse
Anfrage stellen Erstellen Sie eine neue Formularanforderungsklasse
machen: Sämaschine Erstellen Sie eine neue Seeder-Klasse
machen: test Erstellen Sie eine neue Testklasse
migrieren: installieren Erstellen Sie das Migrationsrepository
migrieren: aktualisierenSetzen Sie alle Migrationen zurück und führen Sie sie erneut aus
migrieren: zurücksetzen Rollback aller Datenbankmigrationen
migrieren: rollback Rollback der letzten Datenbankmigration
migrieren: status Zeigt den Status jeder Migration an
Warteschlange: fehlgeschlagen
Listet alle fehlgeschlagenen Warteschlangenaufträge auf
Warteschlange: fehlgeschlagene Tabelle
Erstellen Sie eine Migration für die Datenbanktabelle für fehlgeschlagene Warteschlangenjobs
https://riptutorial.com/de/home 117
Befehl Beschreibung
Warteschlange: Flush Leeren Sie alle fehlgeschlagenen Warteschlangenjobs
Schlange: Vergiss es Löschen Sie einen fehlgeschlagenen Warteschlangenjob
Warteschlange: Hör zu Hören Sie sich eine bestimmte Warteschlange an
Warteschlange: NeustartStarten Sie die Warteschlangen-Worker-Daemons nach ihrem aktuellen Job neu
Warteschlange: erneut versuchen
Wiederholen Sie einen fehlgeschlagenen Warteschlangenjob
Warteschlange: TabelleErstellen Sie eine Migration für die Datenbanktabelle der Warteschlangenjobs
Schlange: Arbeit Verarbeiten Sie den nächsten Job in einer Warteschlange
route: cacheErstellen Sie eine Route-Cache-Datei für eine schnellere Routenregistrierung
weg: klar Entfernen Sie die Route-Cache-Datei
route: liste Alle registrierten Routen auflisten
Zeitplan: ausführen Führen Sie die geplanten Befehle aus
Sitzung: Tisch Erstellen Sie eine Migration für die Sitzungsdatenbanktabelle
Verkäufer: veröffentlichenVeröffentlichen Sie alle publizierbaren Elemente aus Lieferantenpaketen
Ansicht: klar Löschen Sie alle kompilierten Ansichtsdateien
Examples
Einführung
Artisan ist ein Dienstprogramm, mit dem Sie bestimmte wiederkehrende Aufgaben mit Bash-Befehlen ausführen können. Es umfasst viele Aufgaben, darunter: die Arbeit mit Datenbank - Migrationen und Säen , Cache zu löschen, notwendigen Dateien für die Authentifizierung Setup erstellen, machen neue Controller, Modelle, Ereignisklassen und vieles mehr.
Artisan ist der Name der in Laravel enthaltenen Befehlszeilenschnittstelle. Es bietet eine Reihe hilfreicher Befehle, die Sie beim Entwickeln Ihrer Anwendung verwenden können.
Um eine Liste aller verfügbaren Artisan-Befehle anzuzeigen, können Sie den Befehl list
https://riptutorial.com/de/home 118
verwenden:
php artisan list
Um mehr über die verfügbaren Befehle zu erfahren, müssen Sie ihrem Namen lediglich ein Schlüsselwort help voranstellen:
php artisan help [command-name]
Listet alle registrierten Routen auf, die mit mehreren Methoden gefiltert wurden
php artisan route:list --method=GET --method=POST
Dies gilt für alle Routen, die gleichzeitig GET und POST Methoden akzeptieren.
Ausführen von Laravel Artisan-Befehlen mit PHP-Code
Sie können auch Laravel Artisan-Befehle von Ihren Routen oder Controllern verwenden.
So führen Sie einen Befehl mit PHP-Code aus:
Artisan::call('command-name');
Zum Beispiel,
Artisan::call('db:seed');
Neuen handwerklichen Befehl erstellen und registrieren
Sie können neue Befehle über erstellen
php artisan make:command [commandName]
Dadurch wird die Befehlsklasse [commandName] im Verzeichnis app/Console/Commands .
In dieser Klasse finden Sie die protected $signature und protected $description . Sie stehen für den Namen und die Beschreibung Ihres Befehls, der zur Beschreibung Ihres Befehls verwendet wird.
nach Befehl erstellen Sie können Ihren Befehl innerhalb registrieren app/Console/Kernel.php Klasse , wo finden Sie commands Eigenschaft.
So können Sie Ihren Befehl wie folgt in das $ -Befehlsarray einfügen:
protected $commands = [ Commands\[commandName]::class ];
https://riptutorial.com/de/home 119
und dann kann ich meinen Befehl über die Konsole verwenden.
so als Beispiel habe ich meinen Befehl wie benannt
protected $signature = 'test:command';
Also wann immer ich rennen werde
php artisan test:command
Es wird die handle Methode innerhalb der Klasse mit dem Signatur- test:command aufgerufen.
Handwerker online lesen: https://riptutorial.com/de/laravel/topic/1140/handwerker
https://riptutorial.com/de/home 120
Kapitel 35: Häufige Probleme und schnelle Korrekturen
Einführung
In diesem Abschnitt werden die häufigsten Probleme und schnellen Lösungen für Entwickler (insbesondere Anfänger) aufgeführt.
Examples
TokenMisMatch-Ausnahme
Diese Ausnahme erhalten Sie meist bei Formulareinreichungen. Laravel schützt die Anwendung vor CSRF validiert jede Anforderung und stellt sicher, dass die Anforderung aus der Anwendung stammt. Diese Überprüfung wird mit einem token . Wenn dieses Token nicht übereinstimmt, wird diese Ausnahme generiert.
Schnelle Lösung
Fügen Sie dies in Ihrem Formularelement hinzu. Dies sendet csrf_token zusammen mit anderen Formulardaten, sodass Laravel weiß, dass Ihre Anfrage gültig ist
<input type="hidden" name="_token" value="{{ csrf_token() }}">
Häufige Probleme und schnelle Korrekturen online lesen: https://riptutorial.com/de/laravel/topic/9971/haufige-probleme-und-schnelle-korrekturen
https://riptutorial.com/de/home 121
Kapitel 36: Helfer
Einführung
Laravel-Helfer sind die global zugänglichen Funktionen, die vom Framework definiert werden. Sie kann direkt an beliebiger Stelle in der Anwendung aufgerufen und unabhängig verwendet werden, ohne dass ein Objekt instanziiert oder eine Klasse importiert werden muss.
Es gibt Helfer zur Bearbeitung von Arrays , Pfaden , Strings , URLs usw
Examples
Array-Methoden
array_add ()
Mit dieser Methode werden einem Array neue Schlüsselwertpaare hinzugefügt.
$array = ['username' => 'testuser']; $array = array_add($array, 'age', 18);
Ergebnis
['username' => 'testuser', 'age' => 18]
String-Methoden
camel_case ()
Diese Methode ändert einen String in einen Kamelfall
camel_case('hello_world');
Ergebnis
HelloWorld
Pfad mehods
Pfadmethoden erleichtern den einfachen Zugriff auf anwendungsbezogene Pfade von überall.
public_path ()
Diese Methode gibt den vollständig qualifizierten öffentlichen Pfad der Anwendung zurück.
https://riptutorial.com/de/home 122
Welches ist das öffentliche Verzeichnis.
$path = public_path();
URLs
URL ()
Die URL-Funktion generiert eine vollständig qualifizierte URL für den angegebenen Pfad.
Wenn Ihre Website hello.com
echo url('my/dashboard');
würden zurückkehren
hello.com/my/dashboard
Wenn nichts an die URL-Methode übergeben wird, wird eine Instanz von Illuminate\Routing\UrlGenerator , die so verwendet werden könnte
würde aktuelle URL zurückgeben
echo url()->current();
würde volle URL zurückgeben
echo url()->full();
würde die vorherige URL zurückgeben
echo url()->previous();
Helfer online lesen: https://riptutorial.com/de/laravel/topic/8827/helfer
https://riptutorial.com/de/home 123
Kapitel 37: HTML und Form Builder
Examples
Installation
HTML und Form Builder ist seit Laravel 5 keine Kernkomponente, daher müssen wir sie separat installieren:
composer require laravelcollective/html "~5.0"
Schließlich config/app.php wir in config/app.php den Dienstanbieter und die Fassaden-Aliase wie config/app.php registrieren:
'providers' => [ // ... Collective\Html\HtmlServiceProvider::class, // ... ], 'aliases' => [ // ... 'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class, // ... ],
Vollständige Dokumente sind für Formulare und HTML verfügbar
HTML und Form Builder online lesen: https://riptutorial.com/de/laravel/topic/3672/html-und-form-builder
https://riptutorial.com/de/home 124
Kapitel 38: Installation
Examples
Installation
Laravel-Anwendungen werden mit Composer installiert und verwaltet, einem beliebten PHP-Abhängigkeitsmanager. Es gibt zwei Möglichkeiten, eine neue Laravel-Anwendung zu erstellen.
Über den Komponisten
$ composer create-project laravel/laravel [foldername]
Oder
$ composer create-project --prefer-dist laravel/laravel [foldername]
Ersetzen Sie [Ordnername] durch den Namen des Verzeichnisses, in dem Ihre neue Laravel-Anwendung installiert werden soll. Sie darf vor der Installation nicht existieren. Möglicherweise müssen Sie auch die ausführbare Composer-Datei zu Ihrem Systempfad hinzufügen.
Wenn Sie ein Laravel-Projekt mit einer bestimmten Version des Frameworks erstellen möchten, können Sie ein Versionsmuster angeben. Andernfalls verwendet Ihr Projekt die neueste verfügbare Version.
Wenn Sie beispielsweise ein Projekt in Laravel 5.2 erstellen möchten, würden Sie Folgendes ausführen:
$ composer create-project --prefer-dist laravel/laravel 5.2.*
Warum --prefer-dist
Es gibt zwei Möglichkeiten, ein Paket herunterzuladen: source und dist . Bei stabilen Versionen verwendet Composer standardmäßig den dist . Die source ist ein Versionskontroll-Repository. Wenn --prefer-source aktiviert ist, wird Composer von der Quelle installiert, falls vorhanden.
--prefer-dist ist das Gegenteil von --prefer-source und weist Composer an, falls möglich von dist zu installieren. Dies kann die Installation auf Build-Servern und in anderen Anwendungsfällen, in denen Sie normalerweise keine Herstelleraktualisierungen durchführen, erheblich beschleunigen. Außerdem können Sie Probleme mit Git vermeiden, wenn Sie nicht ordnungsgemäß eingerichtet sind.
Über den Laravel Installer
https://riptutorial.com/de/home 125
Laravel bietet ein hilfreiches Befehlszeilenprogramm zum schnellen Erstellen von Laravel-Anwendungen. Installieren Sie zuerst das Installationsprogramm:
$ composer global require laravel/installer
Sie müssen sicherstellen, dass sich der Composer-Binariesordner in Ihrer $ PATH-Variablen befindet, um das Laravel-Installationsprogramm auszuführen.
Prüfen Sie zunächst, ob es sich bereits in Ihrer $ PATH-Variablen befindet
echo $PATH
Wenn alles korrekt ist, sollte die Ausgabe etwa Folgendes enthalten:
Users/yourusername/.composer/vendor/bin
Wenn nicht, bearbeiten Sie Ihre .bashrc oder, wenn Sie ZSH verwenden, Ihre .zshrc so, dass sie den Pfad zu Ihrem Composer-Herstellerverzeichnis enthält.
Nach der Installation erstellt dieser Befehl eine neue Laravel-Installation in dem von Ihnen angegebenen Verzeichnis.
laravel new [foldername]
Sie können auch verwenden . (ein Punkt) anstelle von [Ordnername] , um das Projekt im aktuellen Arbeitsverzeichnis zu erstellen, ohne ein Unterverzeichnis zu erstellen.
Anwendung ausführen
Laravel wird mit einem PHP-basierten Webserver geliefert, der durch Ausführen gestartet werden kann
$ php artisan serve
Der HTTP-Server verwendet standardmäßig Port 8000. Wenn der Port jedoch bereits verwendet wird oder Sie mehrere Laravel-Anwendungen gleichzeitig ausführen möchten, können Sie mit dem Flag --port einen anderen Port angeben:
$ php artisan serve --port=8080
Der HTTP-Server verwendet localhost als Standarddomäne zum Ausführen der Anwendung. Sie können jedoch das Flag --host verwenden, um eine andere Adresse anzugeben:
$ php artisan serve --host=192.168.0.100 --port=8080
Verwendung eines anderen Servers
Wenn Sie lieber eine andere Webserver-Software verwenden, werden einige
https://riptutorial.com/de/home 126
Konfigurationsdateien im public Verzeichnis Ihres Projekts bereitgestellt. .htaccess für Apache und web.config für ASP.NET. Für andere Software wie NGINX können Sie die Apache-Konfigurationen mithilfe verschiedener Online-Tools konvertieren.
Das Framework erfordert, dass der Webserver-Benutzer über Schreibberechtigungen für die folgenden Verzeichnisse verfügt:
/storage•/bootstrap/cache•
Auf * nix Betriebssystemen kann dies durch erreicht werden
chown -R www-data:www-data storage bootstrap/cache chmod -R ug+rwx storage bootstrap/cache
(wobei www-data der Name und die Gruppe des Webserver-Benutzers ist)
Der Webserver Ihrer Wahl sollte so konfiguriert sein, dass er Inhalte aus dem Verzeichnis /public Ihres Projekts bereitstellt. Dies geschieht normalerweise, indem Sie ihn als Dokumentstamm festlegen. Der Rest Ihres Projekts sollte nicht über Ihren Webserver zugänglich sein.
Wenn Sie alles richtig eingerichtet haben, sollte beim Navigieren zur URL Ihrer Website die Standard-Landing Page von Laravel angezeigt werden.
Bedarf
Das Laravel-Framework hat folgende Anforderungen:
5.3
PHP> = 5.6.4•XML PHP Extension•PDO PHP-Erweiterung•OpenSSL PHP Extension•Mbstring PHP Extension•Tokenizer PHP-Erweiterung•
5.1 (LTS) 5.2
PHP> = 5.5.9•PDO PHP-Erweiterung•Laravel 5.1 ist die erste Version von Laravel, die PHP 7.0 unterstützt.•
5,0
PHP> = 5,4, PHP <7•OpenSSL PHP Extension•Tokenizer PHP-Erweiterung•
https://riptutorial.com/de/home 127
Mbstring PHP Extension•JSON-PHP-Erweiterung (nur bei PHP 5.5)•
4.2
PHP> = 5,4•Mbstring PHP Extension•JSON-PHP-Erweiterung (nur bei PHP 5.5)•
Hello World-Beispiel (Verwenden von Controller und View)
Erstellen Sie eine Laravel-Anwendung:
$ composer create-project laravel/laravel hello-world
1.
Navigieren Sie zum Projektordner, z
$ cd C:\xampp\htdocs\hello-world
2.
Einen Controller erstellen:
$ php artisan make:controller HelloController --resource
3.
Dadurch wird die Datei app / Http / Controllers / HelloController.php erstellt . Die Option --resource generiert CRUD-Methoden für den Controller, z. B. indexieren, erstellen, --resource , aktualisieren.
Registrieren Sie eine Route zu Hello des index - Methode. Fügen Sie diese Zeile zu app / Http / routes.php (Version 5.0 bis 5.2) oder routes / web.php (Version 5.3) hinzu :
4.
Route::get('hello', 'HelloController@index');
Um Ihre neu hinzugefügten Routen $ php artisan route:list , können Sie die $ php artisan route:list ausführen
Erstellen Sie eine Blade-Vorlage im views :
Quellen / Ansichten / hello.blade.php:
<h1>Hello world!</h1>
5.
Jetzt weisen wir die Indexmethode an, die Vorlage hello.blade.php anzuzeigen:
app / Http / Controller / HelloController.php
6.
<?php namespace App\Http\Controllers;
https://riptutorial.com/de/home 128
use Illuminate\Http\Request; use App\Http\Requests; class HelloController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { return view('hello'); } // ... other resources are listed below the index one above
Sie können Ihre App mit dem folgenden PHP Artisan Command php artisan serve : php artisan serve ; Es zeigt Ihnen die Adresse, unter der Sie auf Ihre Anwendung zugreifen können (normalerweise unter http: // localhost: 8000 ) .
Alternativ können Sie direkt zu der entsprechenden Stelle in Ihrem Browser wechseln. Falls Sie einen Server wie XAMPP verwenden (entweder: http: // localhost / hallo-world / public / hallo, falls Sie Ihre Laravel-Instanz, hello-world , direkt in Ihrem Verzeichnis xampp / htdocs installiert haben, wie in: Nachdem Sie das ausgeführt haben Schritt 1 dieses Hello Words von Ihrer Befehlszeilenschnittstelle aus ( Verzeichnis xampp / htdocs ) .
Hallo Weltbeispiel (Basic)
Routendatei öffnen Fügen Sie den folgenden Code ein:
Route::get('helloworld', function () { return '<h1>Hello World</h1>'; });
Nachdem Sie localhost/helloworld haben, wird Hello World localhost/helloworld .
Die Routendatei befindet sich:
5.3
Für das Web
routes/web.php
Für APIs
routes/api.php
5,2 5,1 (LTS) 5,0
https://riptutorial.com/de/home 129
app/Http/routes.php
4.2
app/routes.php
Installation mit LaraDock (Laravel Homestead für Docker)
LaraDock ist eine Laravel Homestead-ähnliche Entwicklungsumgebung, jedoch für Docker anstelle von Vagrant. https://github.com/LaraDock/laradock
Installation
* Benötigt Git und Docker
Klonen Sie das LaraDock-Repository:
A. Wenn Sie bereits ein Laravel-Projekt haben, klonen Sie dieses Repository in Ihrem Laravel-Stammverzeichnis.
git submodule add https://github.com/LaraDock/laradock.git
B. Wenn Sie kein Laravel-Projekt haben und Laravel von Docker installieren möchten, klonen Sie dieses Repo an einer beliebigen Stelle auf Ihrem Computer:
git clone https://github.com/LaraDock/laradock.git
Grundlegende Verwendung
Ausführen von Containern: (Stellen Sie sicher, dass Sie sich im Laradock-Ordner befinden, bevor Sie die Befehle zum Erstellen des Docker-Befehls ausführen.)
Beispiel: NGINX und MySQL docker-compose up -d nginx mysql : docker-compose up -d nginx mysql
Es gibt eine Liste der verfügbaren Container, die Sie auswählen können, um Ihre eigenen Kombinationen zu erstellen.
nginx , hhvm , php-fpm , mysql , redis , postgres , mariadb , neo4j , mongo , apache2 , caddy , memcached , beanstalkd , beanstalkd-console , workspace
1.
Geben Sie den Workspace-Container ein, um Befehle wie (Artisan, Composer, PHPUnit, Gulp, ...) auszuführen.
docker-compose exec workspace bash
2.
Wenn Sie noch kein Laravel-Projekt installiert haben, führen Sie die Schritte aus, um Laravel 3.
https://riptutorial.com/de/home 130
aus einem Docker-Container zu installieren.
ein. Geben Sie den Workspace-Container ein.
b. Installieren Sie Laravel. composer create-project laravel/laravel my-cool-app "5.3.*"
Bearbeiten Sie die Laravel-Konfigurationen. Öffnen Sie die .env-Datei Ihrer Laravel und setzen Sie DB_HOST auf Ihren mysql:
DB_HOST=mysql
4.
Öffnen Sie Ihren Browser und besuchen Sie Ihre localhost-Adresse.5.
Installation online lesen: https://riptutorial.com/de/laravel/topic/7961/installation
https://riptutorial.com/de/home 131
Kapitel 39: Installationsanleitung
Bemerkungen
In diesem Abschnitt erhalten Sie einen Überblick darüber, was Laravel-5.4 ist und warum ein Entwickler es verwenden möchte.
Es sollte auch alle großen Themen in Laravel-5.4 erwähnen und auf die verwandten Themen verweisen. Da die Dokumentation für laravel-5.4 neu ist, müssen Sie möglicherweise erste Versionen dieser verwandten Themen erstellen.
Examples
Installation
Detaillierte Anweisungen zum Einrichten oder Installieren von Laravel.
composer ist für die einfache Installation von laravel erforderlich.
Es gibt drei Methoden, um Laravel in Ihrem System zu installieren:
Über den Laravel Installer
Laden Sie das Laravel-Installationsprogramm mit composer herunter
composer global require "laravel/installer"
Bevor Sie composer verwenden, müssen Sie ~/.composer/vendor/bin zu PATH hinzufügen. Nachdem die Installation abgeschlossen ist, können laravel new Befehl laravel new ein neues Projekt in Laravel erstellen.
Beispiel:
laravel new {folder name}
Dieser Befehl erstellt ein neues Verzeichnis mit dem Namen site und eine neue Laravel Installation mit allen anderen Abhängigkeiten wird im Verzeichnis installiert.
1.
Über Composer Create-Project
Sie können den Befehl im terminal , um eine neue Laravel app zu erstellen:
composer create-project laravel/laravel {folder name}
2.
Über Download3.
https://riptutorial.com/de/home 132
Lade Laravel herunter und entpacke es.
composer install1. Kopieren .env.example .env per teminal oder manuell nach .env .
cp .env.example .env
2.
Öffnen Sie die .env Datei und stellen Sie Ihre Datenbank, E-Mail, Schieber usw. ein (falls erforderlich).
3.
php artisan migrate (wenn Datenbank eingerichtet ist)4. php artisan key:generate5. php artisan serve6. Gehen Sie zu localhost: 8000 , um die Site anzuzeigen7.
Laravel docs
Hallo Weltbeispiel (Basic)
Der Zugriff auf Seiten und die Ausgabe von Daten ist in Laravel relativ einfach. Alle app/routes.php befinden sich in app/routes.php . Es gibt normalerweise einige Beispiele, um den Einstieg zu erleichtern, aber wir erstellen eine neue Route. Öffnen Sie Ihre app/routes.php und fügen Sie den folgenden Code ein:
Route::get('helloworld', function () { return '<h1>Hello World</h1>'; });
Dies teilt Laravel mit, dass beim http://localhost/helloworld in einem Browser die Funktion ausgeführt und die angegebene Zeichenfolge zurückgegeben werden muss.
Hallo Weltbeispiel mit Ansichten und Controller
Angenommen, wir haben eine funktionierende Laravel-Anwendung, die beispielsweise in "mylaravel.com" ausgeführt wird, wir möchten, dass unsere Anwendung eine "Hello World" -Meldung anzeigt, wenn wir auf die URL http://mylaravel.com/helloworld . Dabei werden zwei Dateien (die Ansicht und der Controller) erstellt und eine vorhandene Datei, der Router, geändert.
Die Aussicht
Zunächst öffnen wir eine neue Blade-View-Datei namens helloview.blade.php mit der Zeichenfolge "Hello World". Erstellen Sie es im Verzeichnis app / resources / views
<h1>Hello, World</h1>
Der Controller
Jetzt erstellen wir einen Controller, der die Anzeige dieser Ansicht mit der Zeichenfolge "Hello World" verwaltet. Wir verwenden Handwerker in der Kommandozeile.
https://riptutorial.com/de/home 133
$> cd your_laravel_project_root_directory $> php artisan make:controller HelloController
app/Http/Controllers/HelloController.php wird einfach eine Datei ( app/Http/Controllers/HelloController.php ) erstellt, die die Klasse enthält, die unser neuer Controller HelloController .
Bearbeiten Sie diese neue Datei und schreibt eine neue Methode hello , dass die Ansicht angezeigt werden wir vorher erstellt.
public function hello() { return view('helloview'); }
Dieses 'helloview'-Argument in der View-Funktion ist nur der Name der View-Datei ohne das abschließende ".blade.php". Laravel wird es finden.
Nun , wenn wir rufen Sie die Methode hello des Controllers HelloController es wird die Nachricht angezeigt werden soll . Aber wie verknüpfen wir das mit einem Aufruf an http://mylaravel.com/helloworld ? Mit dem letzten Schritt das Routing.
Der Router
Öffnen Sie die vorhandene Datei app/routes/web.php (in älteren Laravel-Versionen app/Http/routes.php ) und fügen Sie diese Zeile hinzu:
Route::get('/helloworld', 'HelloController@hello');
Dies ist ein sehr selbsterklärender Befehl, der unserer Laravel-App sagt: "Wenn jemand das Verb" GET "verwendet, um auf" / helloworld "in dieser Laravel-App zuzugreifen, geben Sie die Ergebnisse des Aufrufs der Funktion hello im HelloController Controller zurück.
Installationsanleitung online lesen: https://riptutorial.com/de/laravel/topic/2187/installationsanleitung
https://riptutorial.com/de/home 134
Kapitel 40: Kammerdiener
Einführung
Valet ist eine auf macOS zugeschnittene Entwicklungsumgebung. Es entfernt den Bedarf an virtuellen Maschinen, Homestead oder Vagrant. Sie müssen Ihre Datei /etc/hosts nicht mehr ständig aktualisieren. Sie können Ihre Websites sogar öffentlich mit lokalen Tunneln freigeben.
Laravel Valet macht alle Sites in einer *.dev Domäne verfügbar, indem die *.dev Domänennamen gebunden werden.
Syntax
valet-Befehl [Optionen] [Argumente]•
Parameter
Parameter Werte gesetzt
BefehlDomain , fetch-share-url, vergessen, Hilfe, Installation, Verknüpfung , Links , Liste, Protokolle, aktuelle Version, Öffnen, Parken , Pfade, Neustart, Sichern, Starten, Beenden, Deinstallieren, Aufheben der Verknüpfung
Optionen-h, --help, -q, --quiet, -V, --version, --ansi, --no-ansi, -n, --no-Interaktion, -v, -vv, -vvv, - -verbose
Argumente (wahlweise)
Bemerkungen
Da Valet für Linux und Windows nicht inoffiziell ist, gibt es keine Unterstützung außerhalb der jeweiligen Github-Repositorys.
Examples
Valet-Link
Dieser Befehl ist nützlich, wenn Sie eine einzelne Site in einem Verzeichnis und nicht im gesamten Verzeichnis bereitstellen möchten.
cd ~/Projects/my-blog/ valet link awesome-blog
https://riptutorial.com/de/home 135
Valet erstellt in ~/.valet/Sites einen symbolischen Link, der auf Ihr aktuelles Arbeitsverzeichnis verweist. Nach dem Ausführen des Befehls link können Sie auf die Website in Ihrem Browser unter http://awesome-blog.dev zugreifen.
Führen Sie den Befehl valet links aus, um eine Liste aller verknüpften Verzeichnisse anzuzeigen . Sie können valet unlink awesome-blog , um den symbolischen Link zu löschen.
Parkservice
cd ~/Projects valet park
Dieser Befehl registriert Ihr aktuelles Arbeitsverzeichnis als Pfad, den Valet nach Sites suchen soll. Jetzt wird jedes Laravel-Projekt, das Sie in Ihrem "geparkten" Verzeichnis erstellen, automatisch mit der http://folder-name.dev //folder-name.dev-Konvention bedient.
Valet-Links
Dieser Befehl zeigt alle registrierten Valet-Links und die entsprechenden Dateipfade auf Ihrem Computer an.
Befehl:
valet links
Beispielausgabe:
... site1 -> /path/to/site/one site2 -> /path/to/site/two ...
Hinweis 1: Sie können diesen Befehl von überall aus ausführen, nicht nur in einem verknüpften Ordner.
Hinweis 2: Sites werden ohne die Endung .dev aufgelistet. Sie können jedoch mit site1.dev über den Browser auf Ihre Anwendung zugreifen.
Installation
WICHTIG!! Valet ist ein Tool, das nur für macOS entwickelt wurde.
Voraussetzungen
Valet verwendet den HTTP-Port Ihres lokalen Computers (Port 80). Daher können Sie es nicht verwenden, wenn Apache oder Nginx auf demselben Computer installiert sind und ausgeführt werden.
•
https://riptutorial.com/de/home 136
Der inoffizielle Paketmanager Homebrew von macOS ist erforderlich, um Valet ordnungsgemäß zu verwenden.
•
Stellen Sie sicher, dass Homebrew auf die neueste Version aktualisiert wird, indem Sie das brew update im Terminal ausführen.
•
Installation
Installieren Sie PHP 7.1 mithilfe von Homebrew über brew install homebrew/php/php71 Install brew install homebrew/php/php71 .
•
Installieren Sie Valet with Composer über composer global require laravel/valet .•~/.composer/vendor/bin Verzeichnis ~/.composer/vendor/bin an den "PATH" Ihres Systems an, falls es noch nicht vorhanden ist.
•
Führen Sie den Befehl zum valet install Daten aus.•
Nach der Installation Während des Installationsvorgangs hat Valet DnsMasq installiert. Es hat auch registriert, dass der Valet-Daemon automatisch gestartet wird, wenn Ihr System startet. Sie müssen also nicht bei jedem Neustart des Systems den valet start oder die valet install ausführen.
Valet Domain
Mit diesem Befehl können Sie die TLD (Top-Level-Domain) ändern oder anzeigen, die zum Binden von Domänen an Ihren lokalen Computer verwendet wird.
Holen Sie sich die aktuelle TLD
$ valet domain > dev
Legen Sie die TLD fest
$ valet domain local > Your Valet domain has been updated to [local].
Installation (Linux)
WICHTIG!! Valet ist ein für macOS entwickeltes Tool, die unten angegebene Version ist für Linux OS portiert.
Voraussetzungen
Nicht Park als installieren root oder durch die Verwendung von sudo - Befehl.•Valet verwendet den HTTP-Port Ihres lokalen Computers (Port 80). Daher können Sie es nicht verwenden, wenn Apache oder Nginx auf demselben Computer installiert sind und ausgeführt werden.
•
Zum Installieren und Ausführen von Valet ist eine aktuelle Version von composer erforderlich.•
Installation
https://riptutorial.com/de/home 137
Run composer global require cpriego/valet-linux Valet global installiert wird, composer global require cpriego/valet-linux installiert ist.
•
Führen Sie den Befehl valet install , um die Installation abzuschließen.•
Nach der Installation
Während des Installationsvorgangs hat Valet DnsMasq installiert. Es hat auch registriert, dass der Valet-Daemon automatisch gestartet wird, wenn Ihr System startet. Sie müssen also nicht bei jedem Neustart des Systems den valet start oder die valet install ausführen.
Die offizielle Dokumentation finden Sie hier .
Kammerdiener online lesen: https://riptutorial.com/de/laravel/topic/1906/kammerdiener
https://riptutorial.com/de/home 138
Kapitel 41: Kassierer
Bemerkungen
Laravel Cashier kann für die Abonnementabrechnung verwendet werden, indem eine Schnittstelle zu den Abonnementdiensten von Braintree und Stripe bereitgestellt wird. Neben dem grundlegenden Abonnement-Management können Sie damit Gutscheine abwickeln, Abonnements, Mengen austauschen, Widerrufsfristen und PDF-Rechnungserstellung erstellen.
Examples
Streifen-Setup
Ersteinrichtung
Um Stripe für die Abwicklung von Zahlungen verwenden zu können, müssen Sie Folgendes zum composer.json hinzufügen und dann das composer update ausführen:
"laravel/cashier": "~6.0"
Die folgende Zeile muss dann zu config/app.php , dem Dienstanbieter, hinzugefügt werden:
Laravel\Cashier\CashierServiceProvider
Datenbank-Setup
Um Kassierer verwenden zu können, müssen wir die Datenbanken konfigurieren. Wenn noch keine Benutzertabelle vorhanden ist, müssen Sie eine erstellen. Außerdem müssen Sie eine Abonnementtabelle erstellen. Im folgenden Beispiel wird eine vorhandene users geändert. Weitere Informationen zu Modellen finden Sie unter Eloquent Models .
Um den Kassierer zu verwenden, erstellen Sie eine neue Migration und fügen Sie Folgendes hinzu, um die oben genannten Punkte zu erreichen:
// Adjust users table Schema::table('users', function ($table) { $table->string('stripe_id')->nullable(); $table->string('card_brand')->nullable(); $table->string('card_last_four')->nullable(); $table->timestamp('trial_ends_at')->nullable(); }); //Create subscriptions table Schema::create('subscriptions', function ($table) { $table->increments('id');
https://riptutorial.com/de/home 139
$table->integer('user_id'); $table->string('name'); $table->string('stripe_id'); $table->string('stripe_plan'); $table->integer('quantity'); $table->timestamp('trial_ends_at')->nullable(); $table->timestamp('ends_at')->nullable(); $table->timestamps(); });
Wir müssen dann php artisan migrate ausführen, um unsere Datenbank zu aktualisieren.
Modell einrichten
Das abrechnungsfähige Merkmal muss dann dem in app/User.php gefundenen Benutzermodell app/User.php und in Folgendes geändert werden:
use Laravel\Cashier\Billable; class User extends Authenticatable { use Billable; }
Stripe Keys
Damit das Geld auf unserem eigenen Stripe-Konto endet, müssen Sie es in der Datei config/services.php einrichten, indem Sie die folgende Zeile hinzufügen:
'stripe' => [ 'model' => App\User::class, 'secret' => env('STRIPE_SECRET'), ],
Ersetzen des STRIPE_SECRET durch Ihren eigenen geheimen Stripe-Schlüssel.
Nach Abschluss dieses Vorgangs ist Cashier and Strip so eingerichtet, dass Sie mit der Einrichtung von Abonnements fortfahren können.
Kassierer online lesen: https://riptutorial.com/de/laravel/topic/7474/kassierer
https://riptutorial.com/de/home 140
Kapitel 42: Konstanten
Examples
Beispiel
Zuerst müssen Sie eine Datei constants.php erstellen. Es empfiehlt sich, diese Datei im Ordner app / config / zu erstellen. Sie können die Datei constants.php auch in der Datei compose.json hinzufügen.
Beispieldatei:
app / config / constants.php
Array-basierte Konstanten in der Datei:
return [ 'CONSTANT' => 'This is my first constant.' ];
Und diese Konstante erhalten Sie, wenn Sie die Fassade Config :
use Illuminate\Support\Facades\Config;
Dann erhalten Sie den Wert mit dem konstanten Namen CONSTANT wie CONSTANT :
echo Config::get('constants.CONSTANT');
Und das Ergebnis wäre der Wert:
Dies ist meine erste Konstante.
Konstanten online lesen: https://riptutorial.com/de/laravel/topic/9192/konstanten
https://riptutorial.com/de/home 141
Kapitel 43: Laravel Docker
Einführung
Eine Herausforderung, der sich jedes Entwickler- und Entwicklungsteam stellt, ist die Konsistenz der Umgebung. Laravel ist heute eines der beliebtesten PHP-Frameworks. DDocker ist dagegen eine Virtualisierungsmethode, die Probleme mit der Arbeit auf meinem Computer beseitigt, wenn Code mit anderen Entwicklern zusammenarbeitet. Die beiden zusammen schaffen eine Verschmelzung von Nützlichem und Kraftvollem . Obwohl beide sehr unterschiedliche Dinge tun, können beide zu erstaunlichen Produkten kombiniert werden.
Examples
Laradock verwenden
Laradock ist ein Projekt, das ein Ready-to-Go- Paket enthält, das auf Laravel zugeschnitten ist.
Laden Sie Laradock im Stammordner Ihres Projekts herunter oder klonen Sie es:
git clone https://github.com/Laradock/laradock.git
Ändern Sie das Verzeichnis in Laradock und generieren Sie die .env Datei, die zum Ausführen Ihrer Konfigurationen erforderlich ist:
cd laradock cp .env-example .env
Sie können jetzt Docker ausführen. Wenn Sie den Container zum ersten Mal ausführen, werden alle erforderlichen Pakete aus dem Internet heruntergeladen.
docker-compose up -d nginx mysql redis beanstalkd
Jetzt können Sie Ihren Browser öffnen und Ihr Projekt unter http://localhost anzeigen.
Für die vollständige Laradock-Dokumentation und -Konfiguration klicken Sie hier .
Laravel Docker online lesen: https://riptutorial.com/de/laravel/topic/10034/laravel-docker
https://riptutorial.com/de/home 142
Kapitel 44: Laravel-Pakete
Examples
Laravel-Ide-Helfer
Dieses Paket generiert eine Datei, die von Ihrer IDE verstanden wird, sodass eine genaue automatische Vervollständigung möglich ist. Die Generierung erfolgt basierend auf den Dateien in Ihrem Projekt.
Lesen Sie mehr dazu hier
Laravel-Datentabellen
Dieses Paket wurde erstellt, um serverseitige Arbeiten von DataTables jQuery Plugin über die AJAX-Option mithilfe von Eloquent ORM, Fluent Query Builder oder Collection auszuführen.
Lesen Sie hier oder hier mehr darüber
Interventions-Bild
Intervention Image ist eine Open Source-Bibliothek zur Bearbeitung und Bearbeitung von PHP-Bildern. Es bietet eine einfachere und ausdrucksstärkere Methode zum Erstellen, Bearbeiten und Zusammenstellen von Bildern und unterstützt derzeit die beiden gängigsten Bildverarbeitungsbibliotheken GD Library und Imagick.
Lesen Sie mehr dazu hier
Laravel-Generator
Bereiten Sie Ihre APIs und Ihr Admin-Panel in wenigen Minuten vor
Lesen Sie mehr dazu hier
Laravel Socialite
Laravel Socialite bietet eine ausdrucksstarke, fließende Schnittstelle zur OAuth-Authentifizierung mit Facebook, Twitter, Google, LinkedIn, GitHub und Bitbucket. Es behandelt fast den gesamten sozialen Authentifizierungscode, den Sie vor dem Schreiben fürchten.
Lesen Sie mehr dazu hier
Offizielle Pakete
Kassierer
https://riptutorial.com/de/home 143
Laravel Cashier bietet eine ausdrucksstarke, fließende Schnittstelle zu den Abonnement-Abrechnungsdiensten von Stripe und Braintree . Es behandelt fast den gesamten Boilerplate-Abonnement-Rechnungscode, den Sie vor dem Schreiben fürchten. Neben der grundlegenden Abonnementverwaltung kann Cashier Coupons abwickeln, Abonnements tauschen, "Mengen" des Abonnements tauschen, Kulanzzeiten aufheben und sogar PDF-PDFs für die Rechnungslegung erstellen.
Mehr zu diesem Paket finden Sie hier .
Gesandte
Laravel Envoy bietet eine saubere, minimale Syntax zum Definieren allgemeiner Aufgaben, die Sie auf Ihren Remote-Servern ausführen. Mit der Blade-Stil-Syntax können Sie problemlos Aufgaben für die Bereitstellung, Artisan-Befehle und vieles mehr einrichten. Derzeit unterstützt Envoy nur die Betriebssysteme Mac und Linux.
Dieses Paket ist auf Github zu finden.
Reisepass
Laravel macht es bereits leicht, die Authentifizierung über herkömmliche Anmeldeformulare durchzuführen, aber wie sieht es mit APIs aus? APIs verwenden normalerweise Token, um Benutzer zu authentifizieren, und behalten den Sitzungsstatus zwischen Anforderungen nicht bei. Laravel macht die API-Authentifizierung durch die Verwendung von Laravel Passport zu einem Kinderspiel. Mit dieser Funktion können Sie in wenigen Minuten eine vollständige OAuth2-Serverimplementierung für Ihre Laravel-Anwendung durchführen.
Mehr zu diesem Paket finden Sie hier .
Erkunden
Laravel Scout bietet eine einfache, treiberbasierte Lösung zum Hinzufügen von Volltextsuchen zu Ihren Eloquent-Modellen. Mit Modellbeobachtern hält Scout Ihre Suchindizes automatisch mit Ihren Eloquent-Datensätzen synchron.
Derzeit wird Scout mit einem Algolia-Fahrer ausgeliefert. Das Schreiben von benutzerdefinierten Treibern ist jedoch einfach und Sie können Scout mit Ihren eigenen Suchimplementierungen erweitern.
Mehr zu diesem Paket finden Sie hier .
Prominente
Laravel Socialite bietet eine ausdrucksstarke, fließende Schnittstelle zur OAuth-Authentifizierung mit Facebook, Twitter, Google, LinkedIn, GitHub und Bitbucket. Es behandelt fast den gesamten sozialen Authentifizierungscode, den Sie vor dem Schreiben fürchten.
https://riptutorial.com/de/home 144
Dieses Paket ist auf Github zu finden.
Laravel-Pakete online lesen: https://riptutorial.com/de/laravel/topic/8001/laravel-pakete
https://riptutorial.com/de/home 145
Kapitel 45: Lumen-Rahmen
Examples
Erste Schritte mit Lumen
Das folgende Beispiel zeigt die Verwendung von Lumen in WAMP / MAMP / LAMP Umgebungen.
Um mit Lumen , müssen Sie zuerst einige Dinge einrichten.
Komponist•PHPUnit•git (nicht erforderlich, wird aber dringend empfohlen)•
Vorausgesetzt, Sie haben alle diese drei Komponenten installiert (zumindest benötigen Sie den Composer), gehen Sie zunächst über das Terminal zum Webserver-Dokumentstamm. MacOSX und Linux verfügen über ein hervorragendes Terminal. Sie können git bash (was eigentlich mingw32 oder mingw64 ) in Windows verwenden.
$ cd path/to/your/document/root
Dann müssen Sie compose verwenden, um ein Lumen Projekt zu installieren und zu erstellen. Führen Sie den folgenden Befehl aus.
$ composer create-project laravel/lumen=~5.2.0 --prefer-dist lumen-project $ cd lumen-project
lumen-app im obigen Code ist der Ordnername. Sie können es nach Belieben ändern. Nun müssen Sie Ihren virtuellen Host so einrichten, dass er auf den path/to/document/root/lumen-project/public . http://lumen-project.local , Sie haben http://lumen-project.local diesem Ordner zugeordnet. Wenn Sie nun zu dieser URL gehen, sollten Sie eine Nachricht wie die folgende sehen (abhängig von Ihrer installierten Lumen Version war dies in meinem Fall 5.4.4) -
Lumen (5.4.4) (Laravel Components 5.4.*)
Wenn Sie die Datei lumen-project/routers/web.php dort lumen-project/routers/web.php , sollten Sie Folgendes sehen:
$app->get('/', function () use($app) { return $app->version(); });
Herzliche Glückwünsche! Jetzt haben Sie eine funktionierende Lumen Installation. Nein, Sie können diese App erweitern, um Ihre benutzerdefinierten Endpunkte anzuhören.
Lumen-Rahmen online lesen: https://riptutorial.com/de/laravel/topic/9221/lumen-rahmen
https://riptutorial.com/de/home 146
Kapitel 46: Mail
Examples
Grundlegendes Beispiel
Sie können Mail konfigurieren, indem Sie diese Zeilen in der .ENV- Datei der App zusammen mit den Anmeldedaten Ihres E-Mail-Providers hinzufügen oder ändern. Beispielsweise für die Verwendung mit gmail können Sie Folgendes verwenden:
MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 [email protected] MAIL_PASSWORD=yourPassword MAIL_ENCRYPTION=tls
Dann können Sie E-Mails mit der E-Mail senden, zum Beispiel:
$variable = 'Hello world!'; // A variable which can be use inside email blade template. Mail::send('your.blade.file', ['variable' => $variable], function ($message) { $message->from('[email protected]'); $message->sender('[email protected]'); $message->to([email protected]); $message->subject('Hello World'); });
Mail online lesen: https://riptutorial.com/de/laravel/topic/8014/mail
https://riptutorial.com/de/home 147
Kapitel 47: Makros in einer eloquenten Beziehung
Einführung
Wir haben neue Funktionen für Eloquent Relationship in Laravel Version 5.4.8. Wir können eine einzelne Instanz einer hasMany-Beziehung (es ist nur ein Beispiel) abrufen, indem Sie sie an Ort und Stelle definieren
Examples
Wir können eine Instanz der hasMany-Beziehung abrufen
In unserer AppServiceProvider.php
public function boot() { HasMany::macro('toHasOne', function() { return new HasOne( $this->query, $this->parent, $this->foreignKey, $this->localKey ); }); }
Nehmen wir an, wir haben Shop Modal und bekommen die Liste der gekauften Produkte. Nehmen wir an, wir haben allPurchased Relationship für Shop Modal
public function allPurchased() { return $this->hasMany(Purchased::class); } public function lastPurchased() { return $this->allPurchased()->latest()->toHasOne(); }
Makros in einer eloquenten Beziehung online lesen: https://riptutorial.com/de/laravel/topic/8998/makros-in-einer-eloquenten-beziehung
https://riptutorial.com/de/home 148
Kapitel 48: Mehrere DB-Verbindungen in Laravel
Examples
Erste Schritte
In der Datenbankkonfigurationsdatei können mehrere Datenbankverbindungen jeglichen Typs definiert werden (wahrscheinlich app/config/database.php ). Um beispielsweise Daten aus 2 MySQL-Datenbanken abzurufen, definieren Sie beide getrennt:
<?php return array( 'default' => 'mysql', 'connections' => array( # Our primary database connection 'mysql' => array( 'driver' => 'mysql', 'host' => 'host1', 'database' => 'database1', 'username' => 'user1', 'password' => 'pass1' 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ), # Our secondary database connection 'mysql2' => array( 'driver' => 'mysql', 'host' => 'host2', 'database' => 'database2', 'username' => 'user2', 'password' => 'pass2' 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ), ), );
Die Standardverbindung ist immer noch auf mysql . Das heißt, wenn nicht anders angegeben, verwendet die Anwendung die mysql Verbindung.
Schema Builder verwenden
Verwenden Sie im Schema-Builder die Schema-Fassade für jede Verbindung. Führen Sie die Methode connection() , um anzugeben, welche Verbindung verwendet werden soll:
https://riptutorial.com/de/home 149
Schema::connection('mysql2')->create('some_table', function($table) { $table->increments('id'): });
DB Query Builder verwenden
Definieren Sie ähnlich wie der Schema-Generator eine Verbindung im Abfrage-Generator:
$users = DB::connection('mysql2')->select(...);
Eloquent verwenden
Es gibt mehrere Möglichkeiten, zu definieren, welche Verbindung in den Eloquent-Modellen verwendet werden soll. Eine Möglichkeit besteht darin, die $ connection- Variable im Modell festzulegen:
<?php class SomeModel extends Eloquent { protected $connection = 'mysql2'; }
Die Verbindung kann auch zur Laufzeit über die Methode setConnection werden.
<?php class SomeController extends BaseController { public function someMethod() { $someModel = new SomeModel; $someModel->setConnection('mysql2'); $something = $someModel->find(1); return $something; } }
Aus der Laravel-Dokumentation
Auf jede einzelne Verbindung kann über die Verbindungsmethode an der DB Fassade zugegriffen werden, auch wenn mehrere Verbindungen definiert sind. Der an die connection name sollte einer der in der Konfigurationsdatei config/database.php aufgeführten connection entsprechen:
$users = DB::connection('foo')->select(...);
https://riptutorial.com/de/home 150
Auf das Raw kann auch zugegriffen werden, wobei die PDO-Instanz mit der Methode getPdo für eine Verbindungsinstanz zugrunde liegt:
$pdo = DB::connection()->getPdo();
https://laravel.com/docs/5.4/database#using-multiple-database-connections
Mehrere DB-Verbindungen in Laravel online lesen: https://riptutorial.com/de/laravel/topic/9605/mehrere-db-verbindungen-in-laravel
https://riptutorial.com/de/home 151
Kapitel 49: Middleware
Einführung
Middleware sind Klassen, die einer oder mehreren Routen zugeordnet werden können und in der frühen oder letzten Phase des Anforderungszyklus Aktionen ausführen. Wir können sie als eine Reihe von Schichten betrachten, die eine HTTP-Anforderung durchlaufen muss, während sie ausgeführt wird
Bemerkungen
Eine Middleware "Before" wird vor dem Controller-Aktionscode ausgeführt. Eine Middleware wird ausgeführt, nachdem die Anforderung von der Anwendung verarbeitet wurde
Examples
Middleware definieren
Um eine neue Middleware zu definieren, müssen Sie die Middleware-Klasse erstellen:
class AuthenticationMiddleware { //this method will execute when the middleware will be triggered public function handle ( $request, Closure $next ) { if ( ! Auth::user() ) { return redirect('login'); } return $next($request); } }
Dann müssen wir die Middleware registrieren: Wenn die Middleware an alle Routen der Anwendung app/Http/Kernel.php soll, müssen wir sie der Middleware-Eigenschaft von app/Http/Kernel.php :
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \App\Http\Middleware\AuthenticationMiddleware::class ];
Wenn Sie die Middleware nur einigen Routen $routeMiddleware möchten, können Sie sie zu $routeMiddleware
//register the middleware as a 'route middleware' giving it the name of 'custom_auth' protected $routeMiddleware = [
https://riptutorial.com/de/home 152
'custom_auth' => \App\Http\Middleware\AuthenticationMiddleware::class ];
und binden Sie es dann wie folgt an die einzelnen Routen:
//bind the middleware to the admin_page route, so that it will be executed for that route Route::get('admin_page', 'AdminController@index')->middleware('custom_auth');
Vorher nach After Middleware
Ein Beispiel für "vor" Middleware wäre wie folgt:
<?php namespace App\Http\Middleware; use Closure; class BeforeMiddleware { public function handle($request, Closure $next) { // Perform action return $next($request); } }
Während "nach" Middleware so aussehen würde:
<?php namespace App\Http\Middleware; use Closure; class AfterMiddleware { public function handle($request, Closure $next) { $response = $next($request); // Perform action return $response; } }
Der Hauptunterschied besteht darin, wie der Parameter $request behandelt wird. Wenn vor $next($request) Aktionen ausgeführt werden, die vor dem Ausführen des Controller-Codes ausgeführt werden, während $next($request) zuerst aufgerufen wird, werden die Aktionen nach Ausführung des Controller-Codes ausgeführt.
Routen-Middleware
https://riptutorial.com/de/home 153
Jede als routeMiddleware in app/Http/Kernel.php registrierte Middleware kann einer Route zugewiesen werden.
Es gibt verschiedene Möglichkeiten, Middleware zuzuweisen, aber alle tun dasselbe.
Route::get('/admin', 'AdminController@index')->middleware('auth', 'admin'); Route::get('admin/profile', ['using' => 'AdminController@index', 'middleware' => 'auth']); Route::get('admin/profile', ['using' => 'AdminController@index', 'middleware' => ['auth', 'admin']);
In allen obigen Beispielen können Sie auch vollständig qualifizierte Klassennamen als Middleware übergeben, unabhängig davon, ob sie als Routen-Middleware registriert wurde.
use App\Http\Middleware\CheckAdmin; Route::get('/admin', 'AdminController@index')->middleware(CheckAdmin::class);
Middleware online lesen: https://riptutorial.com/de/laravel/topic/3419/middleware
https://riptutorial.com/de/home 154
Kapitel 50: Nützliche Links
Einführung
In diesem Thema finden Sie nützliche Links, um Ihre Laravel-Fähigkeiten zu verbessern oder Ihr Wissen zu erweitern.
Examples
Laravel Ökosystem
Laravel Scout - Laravel Scout bietet eine einfache, treiberbasierte Lösung zum Hinzufügen von Volltextsuchen zu Ihren Eloquent-Modellen.
•
Laravel Passport - API-Authentifizierung ohne Kopfschmerzen. Passport ist ein OAuth2-Server, der in wenigen Minuten fertig ist.
•
Gehöft - Die offizielle Entwicklungsumgebung von Laravel. Mit Unterstützung von Vagrant bringt Homestead Ihr gesamtes Team mit den neuesten PHP, MySQL, Postgres, Redis und mehr auf die gleiche Seite.
•
Laravel Cashier - Mit den integrierten Stripe- und Braintree-Integrationen können Sie die Abonnementabrechnung problemlos durchführen. Coupons, das Austauschen von Abonnements, Stornierungen und sogar PDF-Rechnungen sind sofort einsatzbereit.
•
Forge - Bereitstellen und Bereitstellen unbegrenzter PHP-Anwendungen für DigitalOcean, Linode und AWS.
•
Envoyer - Keine Ausfallzeiten bei der PHP-Bereitstellung.•Valet - Eine Laravel-Entwicklungsumgebung für Mac-Minimalisten. Kein Landstreicher, kein Apache, keine Aufregung.
•
Spark - Leistungsstarkes SaaS-Anwendungsgerüst. Beenden Sie das Schreiben von Boilerplate und konzentrieren Sie sich auf Ihre Anwendung.
•
Lumen - Wenn Sie nur eine API und blitzschnelle Geschwindigkeit benötigen, probieren Sie Lumen. Es ist Laravel super leicht.
•
Statamic - Ein echtes CMS, mit dem Agenturen profitabel gemacht werden können, die Entwickler zufrieden sind und Kunden umarmt werden.
•
Bildung
Laracasts - Lernen Sie praktische, moderne Webentwicklung durch Experten-Screencasts.•Laravel News - Bleiben Sie mit Laravel News auf dem Laufenden.•Laravel.io - Forum mit Open-Source-Code.•
Podcasts
Laravel-Nachrichten-Podcasts•Die Laravel-Podcasts•
https://riptutorial.com/de/home 155
Nützliche Links online lesen: https://riptutorial.com/de/laravel/topic/9957/nutzliche-links
https://riptutorial.com/de/home 156
Kapitel 51: Prominente
Examples
Installation
composer require laravel/socialite
Bei dieser Installation wird davon ausgegangen, dass Sie Composer zum Verwalten Ihrer Abhängigkeiten mit Laravel verwenden. Dies ist eine großartige Möglichkeit, damit umzugehen.
Aufbau
In Ihrer config\services.php können Sie den folgenden Code hinzufügen
'facebook' => [ 'client_id' => 'your-facebook-app-id', 'client_secret' => 'your-facebook-app-secret', 'redirect' => 'http://your-callback-url', ],
Sie müssen den Provider auch zu Ihrer config\app.php
Suchen Sie nach 'providers' => [] und fügen Sie am Ende Folgendes hinzu:
'providers' => [ ... Laravel\Socialite\SocialiteServiceProvider::class, ]
Eine Fassade ist ebenfalls im Paket enthalten. Wenn Sie davon Gebrauch machen möchten, stellen Sie sicher, dass das aliases Array (auch in Ihrer config\app.php ) den folgenden Code enthält
'aliases' => [ .... 'Socialite' => Laravel\Socialite\Facades\Socialite::class, ]
Grundnutzung - Fassade
return Socialite::driver('facebook')->redirect();
Dadurch wird eine eingehende Anfrage an die entsprechende URL umgeleitet, um authentifiziert zu werden. Ein grundlegendes Beispiel wäre ein Controller
https://riptutorial.com/de/home 157
<?php namespace App\Http\Controllers\Auth; use Socialite; class AuthenticationController extends Controller { /** * Redirects the User to the Facebook page to get authorization. * * @return Response */ public function facebook() { return Socialite::driver('facebook')->redirect(); } }
app\Http\routes.php sicher, dass Ihre app\Http\routes.php -Datei über eine Route verfügt, um hier eine eingehende Anfrage zuzulassen.
Route::get('facebook', 'App\Http\Controllers\Auth\AuthenticationController@facebook');
Grundnutzung - Abhängigkeitsinjektion
/** * LoginController constructor. * @param Socialite $socialite */ public function __construct(Socialite $socialite) { $this->socialite = $socialite; }
Im Konstruktor Ihres Controllers können Sie jetzt die Socialite Klasse Socialite , mit der Sie sich bei sozialen Netzwerken anmelden können. Dies ersetzt die Verwendung der Fassade.
/** * Redirects the User to the Facebook page to get authorization. * * @return Response */ public function facebook() { return $this->socialite->driver('facebook')->redirect(); }
Socialite für API - Stateless
public function facebook() { return $this->socialite->driver('facebook')->stateless()->redirect()->getTargetUrl(); }
Dadurch wird die URL, die der Benutzer der API angeben muss, an den Endbenutzer
https://riptutorial.com/de/home 158
zurückgegeben, um eine Autorisierung von Facebook zu erhalten.
Prominente online lesen: https://riptutorial.com/de/laravel/topic/1312/prominente
https://riptutorial.com/de/home 159
Kapitel 52: Richtlinien
Examples
Richtlinien erstellen
Da die Definition der gesamten Autorisierungslogik im AuthServiceProvider in großen Anwendungen mühsam werden kann, können Sie mit Laravel Ihre Autorisierungslogik in "Richtlinien" -Klassen unterteilen. Richtlinien sind einfache PHP-Klassen, die die Berechtigungslogik basierend auf der von ihnen autorisierten Ressource gruppieren.
Sie können eine Richtlinie mit dem Befehl make:policy artisan erstellen. Die generierte Richtlinie wird im app/Policies Verzeichnis abgelegt:
php artisan make:policy PostPolicy
Richtlinien online lesen: https://riptutorial.com/de/laravel/topic/7344/richtlinien
https://riptutorial.com/de/home 160
Kapitel 53: Routenmodellbindung
Examples
Implizite Bindung
Laravel löst automatisch Eloquent-Modelle auf, die in Routen oder Controller-Aktionen definiert sind, deren Variablennamen mit einem Routensegmentnamen übereinstimmen. Zum Beispiel:
Route::get('api/users/{user}', function (App\User $user) { return $user->email; });
Da die auf der Route definierte Eloquent-$ -Variable mit dem {user} -Segment in der URI der Route übereinstimmt, fügt Laravel in diesem Beispiel automatisch die Modellinstanz ein, deren ID mit dem entsprechenden Wert der Anforderungs-URI übereinstimmt. Wenn keine übereinstimmende Modellinstanz in der Datenbank gefunden wird, wird automatisch eine 404-HTTP-Antwort generiert.
Wenn der Tabellenname des Modells aus mehreren Wörtern besteht, muss die Eingabevariable aus Kleinbuchstaben bestehen, damit die implizite Modellbindung funktioniert. Wenn der Benutzer beispielsweise eine Aktion ausführen kann und wir auf diese Aktion zugreifen möchten, lautet die Route folgendermaßen:
Route::get('api/useractions/{useraction}', function (App\UserAction $useraction) { return $useraction->description; });
Explizite Bindung
Verwenden Sie zum Registrieren einer expliziten Bindung die Modellmethode des Routers, um die Klasse für einen bestimmten Parameter anzugeben. Sie sollten Ihre expliziten Modellbindungen in der Boot-Methode der RouteServiceProvider-Klasse definieren
public function boot() { parent::boot(); Route::model('user', App\User::class); }
Als Nächstes können wir eine Route definieren, die den Parameter {user} enthält.
$router->get('profile/{user}', function(App\User $user) { });
https://riptutorial.com/de/home 161
Da wir alle {user} -Parameter an das App\User Modell gebunden haben, wird eine Benutzerinstanz in die Route eingefügt. So wird zum Beispiel bei einer Anfrage an profile/1 die Benutzerinstanz aus der Datenbank mit der ID 1 eingefügt .
Wenn keine übereinstimmende Modellinstanz in der Datenbank gefunden wird, wird automatisch eine 404-HTTP- Antwort generiert.
Routenmodellbindung online lesen: https://riptutorial.com/de/laravel/topic/7098/routenmodellbindung
https://riptutorial.com/de/home 162
Kapitel 54: Routing
Examples
Grundlegendes Routing
Routing definiert eine Zuordnung zwischen HTTP-Methoden und URIs auf der einen Seite und Aktionen auf der anderen Seite. Routen werden normalerweise in die Datei app/Http/routes.php .
In ihrer einfachsten Form wird eine Route definiert, indem die entsprechende HTTP-Methode für die Route-Fassade aufgerufen wird. Als Parameter wird eine Zeichenfolge übergeben, die dem URI (relativ zum Anwendungsstamm) entspricht, und einem Rückruf.
Zum Beispiel: Eine Route zum Stamm-URI der Site, die eine Ansicht nach home zurückgibt, sieht folgendermaßen aus:
Route::get('/', function() { return view('home'); });
Eine Route für eine Post-Anfrage, die einfach die Post-Variablen wiedergibt:
Route::post('submit', function() { return Input::all(); }); //or Route::post('submit', function(\Illuminate\Http\Request $request) { return $request->all(); });
Routen, die auf eine Controller-Methode zeigen
Anstatt den Rückruf inline zu definieren, kann die Route auf eine Controller-Methode in der [ControllerClassName @ Method] -Syntax verweisen:
Route::get('login', 'LoginController@index');
Eine Route für mehrere Verben
Die match Methode kann verwendet werden, um ein Array von HTTP-Methoden für eine bestimmte Route abzugleichen:
https://riptutorial.com/de/home 163
Route::match(['GET', 'POST'], '/', 'LoginController@index');
Sie können auch all , um jede HTTP-Methode für eine bestimmte Route abzugleichen:
Route::all('login', 'LoginController@index');
Routengruppen
Routen können gruppiert werden, um Code-Wiederholungen zu vermeiden.
Angenommen, alle URIs mit dem Präfix /admin verwenden eine bestimmte Middleware mit dem Namen admin und sie befinden sich alle im Namensraum App\Http\Controllers\Admin .
Eine saubere Art, dies mithilfe von Routengruppen darzustellen, lautet wie folgt:
Route::group([ 'namespace' => 'Admin', 'middleware' => 'admin', 'prefix' => 'admin' ], function () { // something.dev/admin // 'App\Http\Controllers\Admin\IndexController' // Uses admin middleware Route::get('/', ['uses' => 'IndexController@index']); // something.dev/admin/logs // 'App\Http\Controllers\Admin\LogsController' // Uses admin middleware Route::get('/logs', ['uses' => 'LogsController@index']); });
Benannte Route
Benannte Routen werden verwendet, um eine URL zu generieren oder auf eine bestimmte Route umzuleiten. Der Vorteil der Verwendung einer benannten Route besteht darin, dass wir, wenn wir den URI einer Route in der Zukunft ändern, die URL nicht ändern oder Weiterleitungen auf diese Route umleiten müssen, wenn wir eine benannte Route verwenden. Wenn die Links jedoch mit der URL erzeugt wurden [z. url('/admin/login') ], dann müssten wir überall dort wechseln, wo sie verwendet wird.
Benannt Routen verwenden erstellt as Arrayschlüssel
Route::get('login', ['as' => 'loginPage', 'uses' => 'LoginController@index']);
oder ein Verfahren unter Verwendung von name
Route::get('login', 'LoginController@index')->name('loginPage');
https://riptutorial.com/de/home 164
URL mit benannter Route generieren
So erstellen Sie eine URL mit dem Namen der Route
$url = route('loginPage');
Wenn Sie den Routennamen für die Umleitung verwenden
$redirect = Redirect::route('loginPage');
Routenparameter
Sie können Routenparameter verwenden, um den Teil des URI-Segments abzurufen. Sie können einen oder mehrere optionale Routenparameter definieren, während Sie eine Route erstellen. Optionale Parameter haben ein ? wird am Ende des Parameternamens angehängt. Dieser Name wird in einer geschweiften Klammern {}
Optionaler Parameter
Route::get('profile/{id?}', ['as' => 'viewProfile', 'uses' => 'ProfileController@view']);
Auf diese Route kann über domain.com/profile/23 zugegriffen werden, wobei 23 der id-Parameter ist. In diesem Beispiel wird die id als Parameter in der view Methode von ProfileController . Da dies ein optionaler Parameter ist, domain.com/profile Zugriff auf domain.com/profile .
Erforderlicher Parameter
Route::get('profile/{id}', ['as' => 'viewProfile', 'uses' => 'ProfileController@view']);
Beachten Sie, dass der Name des erforderlichen Parameters kein ? am Ende des Parameternamens.
Zugriff auf den Parameter in der Steuerung
In Ihrer Steuerung nimmt Ihre Ansichtsmethode einen Parameter mit dem gleichen Namen wie in der routes.php und kann wie eine normale Variable verwendet werden. Laravel sorgt für die Injektion des Wertes:
public function view($id){ echo $id; }
https://riptutorial.com/de/home 165
Fange alle Strecken
Wenn Sie alle Routen abrufen möchten, können Sie einen regulären Ausdruck wie gezeigt verwenden:
Route::any('{catchall}', 'CatchAllController@handle')->where('catchall', '.*');
Wichtig: Wenn Sie andere Routen haben und nicht wollen, dass der Catch-All stört, sollten Sie es am Ende setzen. Zum Beispiel:
Alle Routen abfangen, außer bereits definiert
Route::get('login', 'AuthController@login'); Route::get('logout', 'AuthController@logout'); Route::get('home', 'HomeController@home'); // The catch-all will match anything except the previous defined routes. Route::any('{catchall}', 'CatchAllController@handle')->where('catchall', '.*');
Routen werden in der Reihenfolge abgeglichen, in der sie deklariert sind
Dies ist ein allgemeines Problem bei Laravel-Routen. Routen werden in der Reihenfolge abgeglichen, in der sie deklariert sind. Die erste passende Route ist die, die verwendet wird.
Dieses Beispiel wird wie erwartet funktionieren:
Route::get('/posts/{postId}/comments/{commentId}', 'CommentController@show'); Route::get('/posts/{postId}', 'PostController@show');
Eine CommentController@show an /posts/1/comments/1 CommentController@show . Eine Get-Anfrage an /posts/1 PostController@show .
Dieses Beispiel funktioniert jedoch nicht auf dieselbe Weise:
Route::get('/posts/{postId}', 'PostController@show'); Route::get('/posts/{postId}/comments/{commentId}', 'CommentController@show');
Eine PostController@show an /posts/1/comments/1 PostController@show . Eine Get-Anfrage an /posts/1 PostController@show .
Da Laravel die erste übereinstimmende Route verwendet, entspricht die Anforderung an /posts/1/comments/1 Route::get('/posts/{postId}', 'PostController@show'); und weist die Variable $postId dem Wert 1/comments/1 . Dies bedeutet, dass CommentController@show niemals aufgerufen wird.
Routen ohne Berücksichtigung der Groß- und Kleinschreibung
https://riptutorial.com/de/home 166
Die Routen in Laravel unterscheiden zwischen Groß- und Kleinschreibung. Es bedeutet, dass eine Route wie
Route::get('login', ...);
stimmt mit einer GET-Anfrage für /login überein, jedoch nicht mit einer GET-Anfrage für /Login .
Damit Ihre Routen nicht zwischen Groß- und Kleinschreibung unterscheiden, müssen Sie eine neue Validator-Klasse erstellen, die die angeforderten URLs mit definierten Routen abgleichen soll. Der einzige Unterschied zwischen dem neuen Validator und dem vorhandenen Validator besteht darin, dass er den i- Modifikator am Ende des regulären Ausdrucks für die kompilierte Route anfügt, um zwischen Groß- und Kleinschreibung zu unterscheiden.
<?php namespace Some\Namespace; use Illuminate\Http\Request; use Illuminate\Routing\Route; use Illuminate\Routing\Matching\ValidatorInterface; class CaseInsensitiveUriValidator implements ValidatorInterface { public function matches(Route $route, Request $request) { $path = $request->path() == '/' ? '/' : '/'.$request->path(); return preg_match(preg_replace('/$/','i', $route->getCompiled()->getRegex()), rawurldecode($path)); } }
Damit Laravel Ihren neuen Prüfer verwenden kann, müssen Sie die Liste der Übereinstimmungen aktualisieren, die zum Abgleichen der URL mit einer Route verwendet werden, und den ursprünglichen UriValidator durch Ihren ersetzen.
Fügen Sie dazu oben in der Datei routes.php Folgendes hinzu:
<?php use Illuminate\Routing\Route as IlluminateRoute; use Your\Namespace\CaseInsensitiveUriValidator; use Illuminate\Routing\Matching\UriValidator; $validators = IlluminateRoute::getValidators(); $validators[] = new CaseInsensitiveUriValidator; IlluminateRoute::$validators = array_filter($validators, function($validator) { return get_class($validator) != UriValidator::class; });
Dadurch wird der ursprüngliche Prüfer entfernt und der Liste der Prüfer hinzugefügt.
Routing online lesen: https://riptutorial.com/de/laravel/topic/1284/routing
https://riptutorial.com/de/home 167
Kapitel 55: Sammlungen
Syntax
$ collection = collect (['Value1', 'Value2', 'Value3']); // Schlüssel sind standardmäßig 0, 1, 2, ...,
•
Bemerkungen
Illuminate\Support\Collection bietet eine fließende und bequeme Schnittstelle für den Umgang mit Datenfeldern. Möglicherweise haben Sie diese verwendet, ohne es zu wissen. Beispielabfragen, die mehrere Datensätze abrufen, geben eine Instanz von Illuminate\Support\Collection .
Für aktuelle Dokumentation auf Sammlungen können Sie die offizielle Dokumentation finden hier
Examples
Sammlungen erstellen
Mit dem collect() Helper können Sie leicht neue Collection-Instanzen erstellen, indem Sie ein Array wie das folgende übergeben:
$fruits = collect(['oranges', 'peaches', 'pears']);
Wenn Sie keine Hilfsfunktionen verwenden möchten, können Sie eine neue Collection direkt mit der Klasse erstellen:
$fruits = new Illuminate\Support\Collection(['oranges', 'peaches', 'pears']);
Wie in den Anmerkungen erwähnt, geben Models standardmäßig eine Collection Instanz zurück. Sie können jedoch nach Bedarf Ihre eigenen Sammlungen erstellen. Wenn bei der Erstellung kein Array angegeben wird, wird eine leere Collection erstellt.
woher()
Sie können bestimmte Elemente aus einer Sammlung auswählen, indem Sie die where() Methode verwenden.
$data = [ ['name' => 'Taylor', 'coffee_drinker' => true], ['name' => 'Matt', 'coffee_drinker' => true] ]; $matt = collect($data)->where('name', 'Matt');
https://riptutorial.com/de/home 168
Dieser Code wählt alle Elemente aus der Sammlung aus, bei denen der Name 'Matt' lautet. In diesem Fall wird nur der zweite Artikel zurückgegeben.
Verschachtelung
Genau wie bei den meisten Array-Methoden in Laravel unterstützt where() die Suche nach verschachtelten Elementen. Lassen Sie uns das obige Beispiel erweitern, indem Sie ein zweites Array hinzufügen:
$data = [ ['name' => 'Taylor', 'coffee_drinker' => ['at_work' => true, 'at_home' => true]], ['name' => 'Matt', 'coffee_drinker' => ['at_work' => true, 'at_home' => false]] ]; $coffeeDrinkerAtHome = collect($data)->where('coffee_drinker.at_home', true);
Dies wird nur Taylor zurückgeben, da er zu Hause Kaffee trinkt. Wie Sie sehen, wird die Verschachtelung mit der Punktnotation unterstützt.
Ergänzungen
Wenn Sie eine Sammlung von Objekten anstelle von Arrays erstellen, können diese auch mit where() gefiltert werden. Die Collection versucht dann, alle gewünschten Eigenschaften zu erhalten.
5.3
Bitte beachten Sie, dass die where() -Methode seit Laravel 5.3 versucht, die Werte standardmäßig lose zu vergleichen. Das bedeutet, wenn Sie nach (int)1 suchen, werden auch alle Einträge zurückgegeben, die '1' enthalten. Wenn Sie dieses Verhalten nicht mögen, können Sie die whereStrict() -Methode verwenden.
Verwenden von Get zum Nachschlagen von Werten oder zum Rücksetzen des Standardwerts
Sie befinden sich häufig in einer Situation, in der Sie Variablen mit entsprechenden Werten suchen müssen und Sammlungen erfasst wurden.
Im folgenden Beispiel haben wir drei verschiedene Gebietsschemas in einem Array mit einem entsprechenden Anrufcode zugewiesen. Wir möchten in der Lage sein, ein Gebietsschema bereitzustellen und erhalten im Gegenzug den zugehörigen aufrufenden Code. Der zweite Parameter in get ist ein Standardparameter, wenn der erste Parameter nicht gefunden wird.
function lookupCallingCode($locale) { return collect([ 'de_DE' => 49,
https://riptutorial.com/de/home 169
'en_GB' => 44, 'en_US' => 1, ])->get($locale, 44); }
Im obigen Beispiel können wir Folgendes tun
lookupCallingCode('de_DE'); // Will return 49 lookupCallingCode('sv_SE'); // Will return 44
Sie können sogar einen Rückruf als Standardwert übergeben. Das Ergebnis des Rückrufs wird zurückgegeben, wenn der angegebene Schlüssel nicht vorhanden ist:
return collect([ 'de_DE' => 49, 'en_GB' => 44, 'en_US' => 1, ])->get($locale, function() { return 44; });
Verwenden von Enthält, um zu überprüfen, ob eine Sammlung bestimmte Bedingungen erfüllt
Ein häufiges Problem ist das Sammeln von Elementen, die alle bestimmte Kriterien erfüllen müssen. Im folgenden Beispiel haben wir zwei Elemente für einen Diätplan zusammengestellt und möchten überprüfen, ob die Diät keine ungesunde Nahrung enthält.
// First we create a collection $diet = collect([ ['name' => 'Banana', 'calories' => '89'], ['name' => 'Chocolate', 'calories' => '546'] ]); // Then we check the collection for items with more than 100 calories $isUnhealthy = $diet->contains(function ($i, $snack) { return $snack["calories"] >= 100; });
In diesem Fall wird die Variable $isUnhealthy auf true gesetzt, wenn Schokolade die Bedingung erfüllt, und die Diät ist daher ungesund.
Verwenden von Pluck, um bestimmte Werte aus einer Sammlung zu extrahieren
Sie werden häufig eine Sammlung von Daten erhalten, bei denen Sie nur an Teilen der Daten interessiert sind.
Im Beispiel unten haben wir eine Teilnehmerliste bei einer Veranstaltung erhalten und möchten dem Reiseleiter eine einfache Liste mit Namen geben.
https://riptutorial.com/de/home 170
// First we collect the participants $participants = collect([ ['name' => 'John', 'age' => 55], ['name' => 'Melissa', 'age' => 18], ['name' => 'Bob', 'age' => 43], ['name' => 'Sara', 'age' => 18], ]); // Then we ask the collection to fetch all the names $namesList = $partcipants->pluck('name') // ['John', 'Melissa', 'Bob', 'Sara'];
Sie können das pluck für Sammlungen von Objekten oder verschachtelten Arrays / Objekten mit Punktnotation verwenden.
$users = User::all(); // Returns Eloquent Collection of all users $usernames = $users->pluck('username'); // Collection contains only user names $users->load('profile'); // Load a relationship for all models in collection // Using dot notation, we can traverse nested properties $names = $users->pluck('profile.first_name'); // Get all first names from all user profiles
Mit Map können Sie jedes Element in einer Sammlung bearbeiten
Häufig müssen Sie die Struktur eines Datensatzes ändern und bestimmte Werte bearbeiten.
Im Beispiel unten haben wir eine Sammlung von Büchern mit angehängter Rabattmenge erhalten. Vielmehr haben wir eine Liste von Büchern, deren Preis bereits ermäßigt ist.
$books = [ ['title' => 'The Pragmatic Programmer', 'price' => 20, 'discount' => 0.5], ['title' => 'Continuous Delivery', 'price' => 25, 'discount' => 0.1], ['title' => 'The Clean Coder', 'price' => 10, 'discount' => 0.75], ]; $discountedItems = collect($books)->map(function ($book) { return ['title' => $book["title"], 'price' => $book["price"] * $book["discount"]]; }); //[ // ['title' => 'The Pragmatic Programmer', 'price' => 10], // ['title' => 'Continuous Delivery', 'price' => 12.5], // ['title' => 'The Clean Coder', 'price' => 5], //]
Dies könnte auch die Schlüssel verwendet werden , um zu ändern, lassen Sie uns sagen , dass wir den Schlüssel ändern wollte title name dies eine geeignete Lösung wäre.
Verwenden Sie sum, avg, min oder max für eine Sammlung für statistische Berechnungen
Sammlungen bieten Ihnen auch eine einfache Möglichkeit, einfache statistische Berechnungen durchzuführen.
https://riptutorial.com/de/home 171
$books = [ ['title' => 'The Pragmatic Programmer', 'price' => 20], ['title' => 'Continuous Delivery', 'price' => 30], ['title' => 'The Clean Coder', 'price' => 10], ] $min = collect($books)->min('price'); // 10 $max = collect($books)->max('price'); // 30 $avg = collect($books)->avg('price'); // 20 $sum = collect($books)->sum('price'); // 60
Eine Sammlung sortieren
Es gibt verschiedene Möglichkeiten, eine Sammlung zu sortieren.
Sortieren()
Die sort sortiert die Sammlung:
$collection = collect([5, 3, 1, 2, 4]); $sorted = $collection->sort(); echo $sorted->values()->all(); returns : [1, 2, 3, 4, 5]
Die sort ermöglicht auch das Übergeben eines benutzerdefinierten Rückrufs mit Ihrem eigenen Algorithmus. Unter der Haube sortieren Sie PHP- usort .
$collection = $collection->sort(function ($a, $b) { if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; });
Sortiere nach()
Die sortBy Methode sortiert die Auflistung nach dem angegebenen Schlüssel:
$collection = collect([ ['name' => 'Desk', 'price' => 200], ['name' => 'Chair', 'price' => 100], ['name' => 'Bookcase', 'price' => 150], ]); $sorted = $collection->sortBy('price'); echo $sorted->values()->all();
https://riptutorial.com/de/home 172
returns: [ ['name' => 'Chair', 'price' => 100], ['name' => 'Bookcase', 'price' => 150], ['name' => 'Desk', 'price' => 200], ]
Die sortBy Methode ermöglicht die Verwendung des Punktnotierungsformats für den Zugriff auf tiefere Schlüssel, um ein mehrdimensionales Array zu sortieren.
$collection = collect([ ["id"=>1,"product"=>['name' => 'Desk', 'price' => 200]], ["id"=>2, "product"=>['name' => 'Chair', 'price' => 100]], ["id"=>3, "product"=>['name' => 'Bookcase', 'price' => 150]], ]); $sorted = $collection->sortBy("product.price")->toArray(); return: [ ["id"=>2, "product"=>['name' => 'Chair', 'price' => 100]], ["id"=>3, "product"=>['name' => 'Bookcase', 'price' => 150]], ["id"=>1,"product"=>['name' => 'Desk', 'price' => 200]], ]
SortByDesc ()
Diese Methode hat dieselbe Signatur wie die sortBy Methode, sortiert die Auflistung jedoch in umgekehrter Reihenfolge.
Verwenden Sie reduzieren ()
Die reduce Methode reduziert die Sammlung auf einen einzelnen Wert und übergibt das Ergebnis jeder Iteration an die nachfolgende Iteration. Bitte siehe Methode reduzieren .
Die reduce durchläuft jedes Element mit einer Auflistung und erzeugt ein neues Ergebnis für die nächste Iteration. Jedes Ergebnis der letzten Iteration wird durch den ersten Parameter übergeben (in den folgenden Beispielen als $carry ).
Diese Methode kann viele Datenmengen für große Datenmengen verarbeiten. Für die folgenden Beispiele verwenden wir die folgenden Beispielstudiendaten:
$student = [ ['class' => 'Math', 'score' => 60], ['class' => 'English', 'score' => 61], ['class' => 'Chemistry', 'score' => 50], ['class' => 'Physics', 'score' => 49], ];
Summe der Gesamtpunktzahl des Schülers
$sum = collect($student) ->reduce(function($carry, $item){
https://riptutorial.com/de/home 173
return $carry + $item["score"]; }, 0);
Ergebnis: 220
Erläuterung:
$carry ist das Ergebnis der letzten Iteration.•Der zweite Parameter ist der Standardwert für den $ carry in der ersten Iterationsrunde. In diesem Fall ist der Standardwert 0
•
Übergeben Sie einen Schüler, wenn alle Ergebnisse> = 50 sind
$isPass = collect($student) ->reduce(function($carry, $item){ return $carry && $item["score"] >= 50; }, true);
Ergebnis: false
Erläuterung:
Der Standardwert von $ carry ist wahr•Wenn alle Punkte größer als 50 sind, wird das Ergebnis als wahr zurückgegeben. Wenn weniger als 50, wird false zurückgegeben.
•
Versagen Sie einen Schüler, wenn eine Punktzahl <50 ist
$isFail = collect($student) ->reduce(function($carry, $item){ return $carry || $item["score"] < 50; }, false);
Ergebnis: true
Erklären:
Der Standardwert von $ carry ist false•Wenn eine Bewertung unter 50 liegt, geben Sie true zurück. Sind alle Werte größer als 50, wird false zurückgegeben.
•
Betreff mit der höchsten Punktzahl zurückgeben
$highestSubject = collect($student) ->reduce(function($carry, $item){ return $carry === null || $item["score"] > $carry["score"] ? $item : $carry; });
Ergebnis: [ "subject" => "English", "score" => 61 ]
Erklären:
https://riptutorial.com/de/home 174
Der zweite Parameter wird in diesem Fall nicht bereitgestellt.•
Der Standardwert von $ carry ist null, daher überprüfen wir dies in unserer Bedingung.•
Verwenden von macro () zum Erweitern von Sammlungen
Mit der Funktion macro() können Sie den Illuminate\Support\Collection Objekten neue Funktionen hinzufügen
Verwendungszweck:
Collection::macro("macro_name", function ($parameters) { // Your macro });
Zum Beispiel:
Collection::macro('uppercase', function () { return $this->map(function ($item) { return strtoupper($item); }); }); collect(["hello", "world"])->uppercase();
Ergebnis: ["HELLO", "WORLD"]
Verwenden der Array-Syntax
Das Collection Objekt implementiert die ArrayAccess und IteratorAggregate Schnittstelle, sodass diese wie ein Array verwendet werden kann.
Auf Sammlungselement zugreifen:
$collection = collect([1, 2, 3]); $result = $collection[1];
Ergebnis: 2
Neues Element zuweisen:
$collection = collect([1, 2, 3]); $collection[] = 4;
Ergebnis: $collection ist [1, 2, 3, 4]
Loop-Sammlung:
$collection = collect(["a" => "one", "b" => "two"]); $result = ""; foreach($collection as $key => $value){
https://riptutorial.com/de/home 175
$result .= "(".$key.": ".$value.") "; }
Ergebnis: $result ist (a: one) (b: two)
Konvertierung von Array in Collection:
Um eine Collection in ein natives PHP-Array zu konvertieren, verwenden Sie:
$array = $collection->all(); //or $array = $collection->toArray()
Verwenden Sie zum Konvertieren eines Arrays in eine Sammlung Folgendes:
$collection = collect($array);
Verwenden von Sammlungen mit Array-Funktionen
Bitte beachten Sie, dass Sammlungen normale Objekte sind, die nicht ordnungsgemäß konvertiert werden, wenn sie von Funktionen verwendet werden, die explizit Arrays erfordern, wie array_map($callback) .
Stellen Sie sicher, dass Sie die Auflistung zuerst konvertieren, oder verwenden Sie stattdessen die von der Collection Klasse bereitgestellte Methode: $collection->map($callback)
Sammlungen online lesen: https://riptutorial.com/de/laravel/topic/2358/sammlungen
https://riptutorial.com/de/home 176
Kapitel 56: Seitennummerierung
Examples
Paginierung in Laravel
In anderen Rahmen ist die Paginierung Kopfschmerzen. Laravel macht es einfach, es kann Paginierung erzeugen, indem einige Codezeilen in Controller und View eingefügt werden.
Grundlegende Verwendung
Es gibt viele Möglichkeiten, Elemente zu paginieren, aber die einfachste ist die Verwendung der paginate-Methode für den Query Builder oder eine Eloquent-Abfrage . Laravel im Auslieferungszustand sorgt für die Einstellung von Grenzwert und Versatz basierend auf der aktuellen Seite, die vom Benutzer angezeigt wird. Standardmäßig wird die aktuelle Seite vom Wert des Arguments für die Abfragezeichenfolge der HTTP-Anforderung erkannt. Dieser Wert wird von Laravel selbstverständlich automatisch erkannt und in von Paginator generierte Links eingefügt.
Nehmen wir an, wir wollen die paginate Methode bei einer Abfrage aufrufen. In unserem Beispiel ist das übergebene Argument für die Paginierung die Anzahl der Elemente, die Sie "pro Seite" anzeigen möchten. In unserem Fall wollen wir 10 Elemente pro Seite anzeigen.
<?php namespace App\Http\Controllers; use DB; use App\Http\Controllers\Controller; class UserController extends Controller { /** * Show all of the users for the application. * * @return Response */ public function index() { $users = DB::table('users')->paginate(10); return view('user.index', ['users' => $users]); } }
Hinweis: Derzeit können Paginierungsoperationen, die eine groupBy Anweisung verwenden, von Laravel nicht effizient ausgeführt werden. Wenn Sie eine groupBy mit einer paginierten Ergebnismenge verwenden müssen, wird empfohlen, dass Sie die Datenbank abfragen und einen Paginator manuell erstellen.
Einfache Paginierung
https://riptutorial.com/de/home 177
Angenommen, Sie möchten nur die Links Weiter und Zurück in Ihrer Paginierungsansicht anzeigen. Laravel bietet Ihnen diese Option mithilfe der simplePaginate Methode.
$users = DB::table('users')->simplePaginate(10);
Ergebnisse in einer Ansicht anzeigen
Jetzt können Sie die Paginierung in der Ansicht anzeigen. Eigentlich , wenn Sie den Anruf paginate oder simplePaginate Methoden auf Eloquent Abfrage erhalten Sie eine paginator Instanz. Wenn die Paginate-Methode aufgerufen wird, erhalten Sie eine Instanz von Illuminate\Pagination\LengthAwarePaginator . Wenn Sie die simplePaginate Methode simplePaginate , erhalten Sie eine Instanz von Illuminate\Pagination\Paginator . Diese Instanzen / Objekte werden mit mehreren Methoden geliefert, die die Ergebnismenge erklären. Zusätzlich zu diesen Hilfsmethoden sind die Paginator-Instanzen Iteratoren und können als Array geschleift werden.
Sobald Sie die Ergebnisse erhalten haben, können Sie die Seitenlinks mit Hilfe von Blade leicht rendern
<div class="container"> @foreach ($users as $user) {{ $user->name }} @endforeach </div> {{ $users->links() }}
Die links zeigt die Verknüpfungen zu anderen Seiten in der Ergebnismenge automatisch an. Jeder dieser Links enthält die spezifische Seitennummer, dh die Zeichenfolgenvariable ?page . Der durch die links-Methode generierte HTML-Code ist perfekt mit dem Bootstrap-CSS-Framework kompatibel .
Ändern der Seitenumbrüche
Während der Verwendung der Laravel-Paginierung können Sie Ihre eigenen benutzerdefinierten Ansichten verwenden. Wenn Sie die links-Methode in einer Paginator-Instanz aufrufen, übergeben Sie den Ansichtsnamen als erstes Argument an die Methode:
{{ $paginator->links('view.name') }}
oder
Sie können die Paginierungsansichten anpassen, indem Sie sie mit dem Befehl vendor: publish in das Verzeichnis resources/views/vendor exportieren:
php artisan vendor:publish --tag=laravel-pagination
Mit diesem Befehl werden die Ansichten im Verzeichnis resources/views/vendor/pagination . Die Datei default.blade.php in diesem Verzeichnis entspricht der Standard-Seitenumbruchansicht. Bearbeiten Sie diese Datei, um den HTML-Code für die Paginierung zu ändern.
https://riptutorial.com/de/home 178
Seitennummerierung online lesen: https://riptutorial.com/de/laravel/topic/2359/seitennummerierung
https://riptutorial.com/de/home 179
Kapitel 57: Sparkpost-Integration mit Laravel 5.4
Einführung
Laravel 5.4 ist mit Sparkpost Api Lib vorinstalliert. Sparkpost lib erfordert einen geheimen Schlüssel, den Sie in Ihrem Sparkpost-Konto finden können.
Examples
Beispieldaten für die .env-Datei
Um ein Sparkpost-E-Mail-API-Setup erfolgreich zu erstellen, fügen Sie der env-Datei die unten angegebenen Details hinzu. Ihre Anwendung eignet sich gut, um E-Mails zu senden. MAIL_DRIVER = Funkenpfosten SPARKPOST_SECRET = HINWEIS: Die obigen Details enthalten nicht den Code, der in einem Controller geschrieben wurde, der die Geschäftslogik zum Senden von E-Mails mithilfe der Mail :: send-Funktion von laravels enthält.
Sparkpost-Integration mit Laravel 5.4 online lesen: https://riptutorial.com/de/laravel/topic/10136/sparkpost-integration-mit-laravel-5-4
https://riptutorial.com/de/home 180
Kapitel 58: Stellen Sie die Laravel 5-App auf Shared Hosting unter Linux Server bereit
Bemerkungen
Weitere Informationen zum Bereitstellen des Laravel-Projekts für Shared Hosting finden Sie in diesem Github-Repo.
Examples
Laravel 5 App für Shared Hosting auf Linux Server
Standardmäßig macht der public Ordner des Laravel-Projekts den Inhalt der App verfügbar, der von jedem beliebigen Benutzer angefordert werden kann. Der Rest des App-Codes ist für jeden ohne die entsprechenden Berechtigungen unsichtbar oder unzugänglich.
Nachdem Sie die Anwendung auf Ihrem Entwicklungscomputer entwickelt haben, muss sie auf einen Produktionsserver übertragen werden, damit Sie von überall aus über das Internet darauf zugreifen können.
Für die meisten Apps / Websites ist die erste Wahl die Verwendung eines Shared Hosting-Pakets von Hosting-Dienstleistern wie GoDaddy, HostGator usw., hauptsächlich aufgrund niedriger Kosten.
Hinweis : Sie können Ihren Provider auffordern, document_root manuell zu ändern. Alles, was Sie tun müssen, ist, Ihre Laravel-Anwendung auf den Server hochzuladen (über FTP), die Änderung des Root-Verzeichnisses in {app} / public anzufordern, und Sie sollten zufrieden sein.
Für solche gemeinsam genutzten Hosting-Pakete gelten jedoch Einschränkungen hinsichtlich des Terminalzugriffs und der Dateiberechtigungen. Standardmäßig muss der App / Code in den Ordner public_html des freigegebenen Hosting-Kontos hochgeladen werden.
Wenn Sie also ein Laravel-Projekt auf ein gemeinsam genutztes Hosting-Konto hochladen möchten, wie würden Sie dieses Problem lösen? Sollten Sie die gesamte App (Ordner) in den Ordner public_html Ihres freigegebenen Hosting-Kontos hochladen? - Sicher nein
Weil alles im Ordner public_html "öffentlich, dh von jedermann", zugänglich ist, was ein großes Sicherheitsrisiko darstellt.
Schritte zum Hochladen eines Projekts auf ein Shared-Hosting-Konto - der Laravel-Weg
Schritt 1 Erstellen Sie auf der gleichen Ebene wie der Ordner public_html einen Ordner namens laravel (oder beliebiges anderes).
https://riptutorial.com/de/home 181
Eg: / |--var |---www |----laravel //create this folder in your shared hosting account |----public_html |----log
Schritt 2 Kopieren Sie alles außer dem public Ordner aus Ihrem Laravel-Projekt (auf dem Entwicklungscomputer) im laravel Ordner (auf dem Serverhost - Shared Hosting-Konto). Sie können verwenden:
C-Panel: was wäre die langsamste Option•FTP-Client: wie FileZilla , um eine Verbindung zu Ihrem freigegebenen Hosting-Konto herzustellen und Ihre Dateien und Ordner per FTP-Upload zu übertragen
•
Netzwerklaufwerk zuordnen: Sie können auf Ihrem Entwicklungscomputer auch ein zugeordnetes Netzwerklaufwerk erstellen, um eine Verbindung zum Stammordner Ihres freigegebenen Hosting-Kontos herzustellen, indem Sie als Netzwerkadresse " ftp: // Ihr-Domänenname " verwenden.
•
Schritt 3 Öffnen Sie den public Ordner Ihres Laravel-Projekts (auf dem Entwicklungscomputer), kopieren Sie alles und fügen Sie es in den Ordner public_html (auf dem Serverhost - Shared Hosting-Konto) ein. Schritt 4 Öffnen Sie nun die Datei index.php im Ordner public_html des freigegebenen Hosting-Kontos (im Cpanel-Editor oder einem anderen verbundenen Editor) und:
Veränderung:
require __DIR__.'/../bootstrap/autoload.php';
Zu:
require __DIR__.'/../laravel/bootstrap/autoload.php';
Und ändern:
$app = require_once __DIR__.'/../bootstrap/app.php';
Zu:
$app = require_once __DIR__.'/../laravel/bootstrap/app.php';
Speichern und schließen.
Schritt 5 Gehen Sie jetzt zum laravel Ordner (auf dem Shared Hosting-Konto -server) und öffnen
https://riptutorial.com/de/home 182
server.php Datei server.php Veränderung
require_once __DIR__.'/public/index.php';
Zu:
require_once __DIR__.'../public_html/index.php';
Speichern und schließen.
Schritt 6 laravel/storage Dateiberechtigungen für den laravel/storage (rekursiv) und alle Dateien, Unterordner und Dateien auf dem gemeinsam genutzten Hosting-Konto - Server auf 777 . Hinweis: Seien Sie vorsichtig mit den Dateiberechtigungen in Linux. Sie sind wie ein zweischneidiges Schwert. Wenn sie nicht korrekt verwendet werden, kann Ihre App für Angriffe anfällig werden. Zum Verständnis der Dateiberechtigungen für Linux lesen Sie https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions
Schritt 7
Da die .env Datei des lokalen / Entwicklungsservers von git ignoriert wird, sollte sie ignoriert werden, da sie alle Umgebungsvariablen einschließlich APP_KEY enthält und nicht für public verfügbar gemacht werden darf, indem sie in die Repositorys verschoben wird. Sie können auch sehen, dass die .gitignore Datei .env erwähnt hat, so dass sie nicht in Repositorys .env wird.
Nachdem Sie alle oben genannten Schritte ausgeführt haben, .env eine .env Datei im laravel-Ordner und fügen Sie alle Umgebungsvariable, die Sie aus der lokalen / Entwicklungsserver- .env Datei verwendet haben, zur .env Datei des Produktionsservers hinzu.
Es gibt sogar Konfigurationsdateien wie app.php , database.php im config-Ordner der laravel-Anwendung, die diese Variablen standardmäßig im zweiten Parameter von env() aber die Werte in diesen Dateien nicht fest app.php , da dies Auswirkungen auf die. Hat Konfigurationsdateien der Benutzer, die Ihr Repository abrufen. Es wird daher empfohlen, die .env Datei manuell zu erstellen!
Auch Laravel gibt die .env-example , die Sie als Referenz verwenden können.
Das ist es.
Wenn Sie nun die URL aufrufen, die Sie als Domäne mit Ihrem Server konfiguriert haben, sollte Ihre Laravel-App genauso funktionieren wie auf Ihrem Localhost-Entwicklungscomputer. Der Anwendungscode ist jedoch immer noch sicher und für niemanden ohne entsprechende Dateiberechtigungen zugänglich.
Stellen Sie die Laravel 5-App auf Shared Hosting unter Linux Server bereit online lesen: https://riptutorial.com/de/laravel/topic/2410/stellen-sie-die-laravel-5-app-auf-shared-hosting-unter-linux-server-bereit
https://riptutorial.com/de/home 183
Kapitel 59: Testen
Examples
Einführung
Das Schreiben von überprüfbarem Code ist ein wichtiger Bestandteil des Aufbaus eines robusten, wartbaren und agilen Projekts. Die Unterstützung des am weitesten verbreiteten Testframeworks von PHP, PHPUnit , ist direkt in Laravel integriert. PHPUnit wird mit der Datei phpunit.xml konfiguriert, die sich im Stammverzeichnis jeder neuen Laravel-Anwendung befindet.
Das tests , auch im Stammverzeichnis, enthält die einzelnen Testdateien, die die Logik zum Testen jedes Teils Ihrer Anwendung enthalten. Natürlich liegt es in Ihrer Verantwortung als Entwickler, diese Tests zu schreiben, während Sie Ihre Anwendung erstellen. Laravel enthält jedoch eine Beispieldatei ( ExampleTest.php , die Sie zum Laufen ExampleTest.php .
<?php use Illuminate\Foundation\Testing\WithoutMiddleware; use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseTransactions; class ExampleTest extends TestCase { /** * A basic functional test example. * * @return void */ public function testBasicExample() { $this->visit('/') ->see('Laravel 5'); } }
In der testBasicExample() -Methode besuchen wir die testBasicExample() der Site und stellen sicher, dass der Text Laravel 5 irgendwo auf dieser Seite testBasicExample() . Wenn der Text nicht vorhanden ist, schlägt der Test fehl und generiert einen Fehler.
Testen Sie ohne Middleware und mit einer frischen Datenbank
use DatabaseMigrations um die Aktualisierung einer neuen Datenbank durch Handwerker vor dem Ausführen von Tests zu ermöglichen. Wenn Sie Middleware wie Auth vermeiden möchten, use WithoutMiddleware .
<?php use Illuminate\Foundation\Testing\WithoutMiddleware; use Illuminate\Foundation\Testing\DatabaseMigrations;
https://riptutorial.com/de/home 184
class ExampleTest extends TestCase { use DatabaseMigrations, WithoutMiddleware; /** * A basic functional test example. * * @return void */ public function testExampleIndex() { $this->visit('/protected-page') ->see('All good'); } }
Datenbanktransaktionen für mehrere Datenbankverbindungen
DatabaseTransactions Eigenschaft DatabaseTransactions können Datenbanken die Änderungen während der Tests rückgängig machen. Wenn Sie mehrere Datenbanken zurücksetzen möchten, müssen Sie $connectionsToTransact Eigenschaften von $connectionsToTransact festlegen
use Illuminate\Foundation\Testing\DatabaseMigrations; class ExampleTest extends TestCase { use DatabaseTransactions; $connectionsToTransact =["mysql","sqlite"] //tell Laravel which database need to rollBack public function testExampleIndex() { $this->visit('/action/parameter') ->see('items'); } }
Testen der Einrichtung unter Verwendung der Speicherdatenbank
Das folgende Setup stellt sicher, dass das Testframework (PHPUnit) verwendet :memory: Datenbank.
config / database.php
'connections' => [ 'sqlite_testing' => [ 'driver' => 'sqlite', 'database' => ':memory:', 'prefix' => '', ], . . .
https://riptutorial.com/de/home 185
./phpunit.xml
. . . </filter> <php> <env name="APP_ENV" value="testing"/> <env name="APP_URL" value="http://example.dev"/> <env name="CACHE_DRIVER" value="array"/> <env name="SESSION_DRIVER" value="array"/> <env name="QUEUE_DRIVER" value="sync"/> <env name="DB_CONNECTION" value="sqlite_testing"/> </php> </phpunit>
Aufbau
Die Datei phpunit.xml ist die Standardkonfigurationsdatei für Tests und ist bereits zum Testen mit PHPUnit eingerichtet.
Die Standardtestumgebung APP_ENV ist als testing definiert testing wobei das array der CACHE_DRIVER . Bei diesem Setup werden beim Testen keine Daten (Sitzung / Cache) gespeichert.
Um Tests in einer bestimmten Umgebung wie dem Homestead durchzuführen, können die Standardeinstellungen wie folgt geändert werden:
<env name="DB_HOST" value="192.168.10.10"/> <env name="DB_DATABASE" value="homestead"/> <env name="DB_USERNAME" value="homestead"/> <env name="DB_PASSWORD" value="secret"/>
Oder verwenden Sie eine temporäre Datenbank in Arbeitsspeicher :
<env name="DB_CONNECTION" value="sqlite"/> <env name="DB_DATABASE" value=":memory:"/>
Eine letzte Bemerkung aus der Laravel-Dokumentation :
Löschen Sie Ihren Konfigurationscache unbedingt mit dem Befehl config:clear Artisan, bevor Sie die Tests ausführen!
Testen online lesen: https://riptutorial.com/de/laravel/topic/1249/testen
https://riptutorial.com/de/home 186
Kapitel 60: Token Mismatch Error in AJAX
Einführung
Ich habe analysiert, dass das Verhältnis von TokenMismatch Error sehr hoch ist. Und dieser Fehler tritt aufgrund einiger dummer Fehler auf. Es gibt viele Gründe, aus denen Entwickler Fehler machen. Hier einige Beispiele, z. B. Kein _token für Kopfzeilen, Keine _token übergebenen Daten bei Verwendung von Ajax, Berechtigungsprobleme für den Speicherpfad, ein ungültiger Sitzungsspeicherpfad.
Examples
Setup-Token im Header
Setzen Sie das Token auf <head> Ihrer default.blade.php .
<meta name="csrf-token" content="{{csrf_token()}}">
Fügen Sie ajaxSetup oben in Ihr Skript ein, auf das von überall aus ajaxSetup werden kann. Dadurch werden bei jedem ajax Aufruf Kopfzeilen festgelegt
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
Token aktivierenEtikett
Fügen Sie Ihrem <form> -Tag die folgende Funktion hinzu. Diese Funktion generiert ein verstecktes Feld mit dem Namen _token und einem mit dem Token gefüllten Wert.
{{csrf_field()}}
Fügen csrf_token () Funktion csrf_token () zu Ihrem verborgenen _token im value-Attribut hinzu. Dadurch wird nur eine verschlüsselte Zeichenfolge generiert.
<input type="hidden" name="_token" value="{{csrf_token()}}"/> .
Überprüfen Sie den Speicherpfad und die Berechtigung für die Sitzung
Hier APP_URL=http://project.dev/ts/toys-store ich davon aus, dass die Projekt-App-URL APP_URL=http://project.dev/ts/toys-store
storage_path('framework/sessions') Sie die schreibbare Berechtigung auf 1.
https://riptutorial.com/de/home 187
storage_path('framework/sessions') den Ordner fest.Überprüfen Sie den Pfad Ihres Laravel-Projekts 'path' => '/ts/toys-store', die Wurzel Ihres Laravel-Projekts.
2.
Ändern Sie den Namen Ihres Cookies 'cookie' => 'toys-store',3.
return [ 'driver' => env('SESSION_DRIVER', 'file'), 'lifetime' => 120, 'expire_on_close' => false, 'encrypt' => false, 'files' => storage_path('framework/sessions'), 'connection' => null, 'table' => 'sessions', 'lottery' => [2, 100], 'cookie' => 'toys-store', 'path' => '/ts/toys-store', 'domain' => null, 'secure' => false, 'http_only' => true, ];
Verwenden Sie das Feld _token für Ajax
Es gibt viele Möglichkeiten, _token bei einem AJAX-Anruf zu senden
var formData = new FormData($("#cart-add")[0]); Sie alle Werte des Eingabefelds im <form> -Tag mit var formData = new FormData($("#cart-add")[0]);
1.
Verwenden Sie $("form").serialize(); oder $("form").serializeArray();2. Fügen Sie _token manuell zu den data von Ajax hinzu. mit $('meta[name="csrf-token"]').attr('content') oder $('input[name="_token"]').val() .
3.
Wir können als Header für einen bestimmten Ajax-Aufruf wie im folgenden Code festlegen.4.
$.ajax({ url: $("#category-add").attr("action"), type: "POST", data: formData, processData: false, contentType: false, dataType: "json", headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
Token Mismatch Error in AJAX online lesen: https://riptutorial.com/de/laravel/topic/10656/token-mismatch-error-in-ajax
https://riptutorial.com/de/home 188
Kapitel 61: Validierung
Parameter
Parameter Einzelheiten
erforderlich Das Feld ist erforderlich
manchmalValidierungsprüfungen für ein Feld nur ausführen, wenn dieses Feld im Eingabearray vorhanden ist
Email Die Eingabe ist eine gültige E-Mail
max: wert Der Eingabewert sollte unter dem Maximalwert liegen
eindeutig: db_table_name
Der Eingabewert sollte im angegebenen Namen der Datenbanktabelle eindeutig sein
akzeptiert Ja / Ein / 1 wahr, nützlich zum Überprüfen der TOS
active_url Muss eine gültige URL laut checkdnsrr sein
nach : datumDas zu validierende Feld muss einen Wert nach dem angegebenen Datum angeben
Alpha Das zu validierende Feld muss vollständig aus Buchstaben bestehen.
alpha_dashDas zu validierende Feld kann alphanumerische Zeichen sowie Bindestriche und Unterstriche enthalten.
alpha_numDas zu validierende Feld muss vollständig aus alphanumerischen Zeichen bestehen.
Array Muss ein PHP- Array sein
vor : Datum Das Feld muss einen Wert unter dem angegebenen Datum haben
zwischen: min, max
Der Eingabewert sollte zwischen minimalem (min) und maximalem (max) Wert liegen
booleanDas zu validierende Feld muss als Boolean umgewandelt werden können. Zulässige Eingaben sind true , false , 1 , 0 , "1" und "0" .
Bestätigt
Das zu validierende Feld muss ein übereinstimmendes Feld für foo_confirmation . Wenn das Feld unter Validierung ist zum Beispiel password , ein passendes password_confirmation muss Feld in der Eingabe vorhanden sein.
https://riptutorial.com/de/home 189
Parameter Einzelheiten
DatumDas zu validierende Feld muss gemäß der strtotime- PHP-Funktion ein gültiges Datum sein.
ganze Zahl Das zu validierende Feld muss eine ganze Zahl sein
Schnur Das zu validierende Feld muss ein Zeichenfolgentyp sein .
Examples
Basisbeispiel
Sie können Anfragedaten mit der validate Methode validate (verfügbar im Basis-Controller, bereitgestellt von der Eigenschaft ValidatesRequests ).
Wenn die Regeln erfüllt sind, wird Ihr Code normal ausgeführt. Schlägt die Validierung fehl, wird automatisch eine Fehlerantwort mit den Validierungsfehlern zurückgesendet:
Bei typischen HTML-Formularanfragen wird der Benutzer zur vorherigen Seite weitergeleitet, wobei das Formular die übergebenen Werte enthält
•
Für Anforderungen, die eine JSON-Antwort erwarten, wird eine HTTP-Antwort mit Code 422 generiert
•
In Ihrem UserController speichern Sie beispielsweise einen neuen Benutzer in der store Methode, für den vor dem Speichern eine Überprüfung erforderlich ist.
/** * @param Request $request * @return Response */ public function store(Request $request) { $this->validate($request, [ 'name' => 'required', 'email' => 'email|unique:users|max:255' ], // second array of validation messages can be passed here [ 'name.required' => 'Please provide a valid name!', 'email.required' => 'Please provide a valid email!', ]); // The validation passed }
In dem obigen Beispiel bestätigen wir , dass der name Feld mit nicht leeren Wert vorhanden ist . Zweitens prüfen wir, ob das email Feld ein gültiges E-Mail-Format hat, in der Datenbanktabelle "Benutzer" eindeutig ist und eine maximale Länge von 255 Zeichen hat.
Die | Das Zeichen (Pipe) kombiniert verschiedene Validierungsregeln für ein Feld.
Manchmal möchten Sie vielleicht nach dem ersten Validierungsfehler die Ausführung von
https://riptutorial.com/de/home 190
Validierungsregeln für ein Attribut beenden. bail dem Attribut die bail Regel zu:
$this->validate($request, [ 'name' => 'bail|required', 'email' => 'email|unique:users|max:255' ]);
Die vollständige Liste der verfügbaren Validierungsregeln finden Sie im Abschnitt Parameter unten .
Array-Überprüfung
Die Überprüfung der Eingabefelder für Array-Formulare ist sehr einfach.
Angenommen, Sie müssen jeden Namen, jede E-Mail-Adresse und den Namen jedes Vaters in einem bestimmten Array überprüfen. Sie könnten folgendes tun:
$validator = \Validator::make($request->all(), [ 'name.*' => 'required', 'email.*' => 'email|unique:users', 'fatherName.*' => 'required' ]); if ($validator->fails()) { return back()->withInput()->withErrors($validator->errors()); }
Laravel zeigt Standardmeldungen zur Überprüfung an. Wenn Sie jedoch benutzerdefinierte Meldungen für Array-basierte Felder wünschen, können Sie den folgenden Code hinzufügen:
[ 'name.*' => [ 'required' => 'Name field is required', ], 'email.*' => [ 'unique' => 'Unique Email is required', ], 'fatherName.*' => [ 'required' => 'Father Name required', ] ]
Ihr endgültiger Code wird folgendermaßen aussehen:
$validator = \Validator::make($request->all(), [ 'name.*' => 'required', 'email.*' => 'email|unique:users', 'fatherName.*' => 'required', ], [ 'name.*' => 'Name Required', 'email.*' => 'Unique Email is required', 'fatherName.*' => 'Father Name required', ]);
https://riptutorial.com/de/home 191
if ($validator->fails()) { return back()->withInput()->withErrors($validator->errors()); }
Andere Validierungsansätze
1) Formularanforderungsbestätigung
Sie können eine "Formularanforderung" erstellen, die die Berechtigungslogik, Validierungsregeln und Fehlernachrichten für eine bestimmte Anforderung in Ihrer Anwendung enthalten kann.
Der CLI-Befehl make:request Artisan generiert die Klasse und platziert sie im Verzeichnis app/Http/Requests :
php artisan make:request StoreBlogPostRequest
Die authorize kann mit der Berechtigungslogik für diese Anforderung überschrieben werden:
public function authorize() { return $this->user()->can('post'); }
Die rules Methode kann mit den spezifischen Regeln für diese Anforderung überschrieben werden:
public function rules() { return [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]; }
Die messages kann mit den spezifischen Nachrichten für diese Anforderung überschrieben werden:
public function messages() { return [ 'title.required' => 'A title is required', 'title.unique' => 'There is another post with the same title', 'title.max' => 'The title may not exceed :max characters', 'body.required' => 'A message is required', ]; }
Um die Anfrage zu validieren, geben Sie einfach die spezifische Request-Klasse der entsprechenden Controller-Methode an. Wenn die Überprüfung fehlschlägt, wird eine Fehlerantwort zurückgesendet.
public function store(StoreBlogPostRequest $request)
https://riptutorial.com/de/home 192
{ // validation passed }
2) Validatoren manuell erstellen
Für mehr Flexibilität möchten Sie möglicherweise einen Validator manuell erstellen und die fehlgeschlagene Validierung direkt abwickeln:
<?php namespace App\Http\Controllers; use Validator; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class PostController extends Controller { public function store(Request $request) { $validator = Validator::make($request->all(), [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); if ($validator->fails()) { return redirect('post/create') ->withErrors($validator) ->withInput(); } // Store the blog post... } }
2) Regeln fließend erstellen
Gelegentlich müssen Sie gelegentlich eindeutige Regeln erstellen. Das Arbeiten mit der boot() -Methode innerhalb eines Service Providers ist möglicherweise zu hoch. Ab Laravel 5.4 können Sie mithilfe der Rule Klasse neue Regeln problemlos erstellen.
Als Beispiel arbeiten wir mit der UserRequest wenn Sie einen Benutzer einfügen oder aktualisieren möchten. Im Moment möchten wir einen Namen benötigen und die E-Mail-Adresse muss eindeutig sein. Das Problem bei der Verwendung der unique Regel besteht darin, dass beim Bearbeiten eines Benutzers dieselbe E-Mail-Adresse beibehalten werden kann. Daher müssen Sie den aktuellen Benutzer von der Regel ausschließen. Das folgende Beispiel zeigt, wie Sie dies mit der neuen Rule problemlos tun können.
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Http\Request; use Illuminate\Validation\Rule;
https://riptutorial.com/de/home 193
class UserRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules(Request $request) { $id = $request->route()->getParameter('user'); return [ 'name' => 'required', // Notice the value is an array and not a string like usual 'email' => [ 'required', Rule::unique('users')->ignore($id) ] ]; } }
Einzelformular-Anforderungsklasse für POST, PUT, PATCH
Nach dem Beispiel 'Form Request Validation' kann dieselbe Request-Klasse für POST , PUT , PATCH sodass Sie keine weitere Klasse erstellen müssen, die dieselben / ähnliche Validierungen verwendet. Dies ist praktisch, wenn Sie in Ihrer Tabelle eindeutige Attribute haben.
/** * Get the validation rules that apply to the request. * * @return array */ public function rules() { switch($this->method()) { case 'GET': case 'DELETE': return []; case 'POST': return [ 'name' => 'required|max:75|unique', 'category' => 'required', 'price' => 'required|between:0,1000', ]; case 'PUT': case 'PATCH': return [
https://riptutorial.com/de/home 194
'name' => 'required|max:75|unique:product,name,' . $this->product, 'category' => 'required', 'price' => 'required|between:0,1000', ]; default:break; } }
In der switch-Anweisung wird der Methodentyp der Anforderung ( GET , DELETE , POST , PUT , PATCH ) von oben betrachtet.
Abhängig von der Methode wird das definierte Array von Regeln zurückgegeben. Wenn Sie ein Feld haben , die einzigartig, wie das ist name im Beispiel Feld, müssen Sie eine bestimmte ID für die Validierung festlegen zu ignorieren.
'field_name' => 'unique:table_name,column_name,' . $idToIgnore`
Wenn Sie einen Primärschlüssel mit einer anderen Bezeichnung als id , geben Sie die Primärschlüsselspalte als vierten Parameter an.
'field_name' => 'unique:table_name,column_name,' . $idToIgnore . ',primary_key_column'
In diesem Beispiel verwenden wir PUT und übergeben den Wert der Produkt-ID an die Route ( admin/products/{product} ). $this->product entspricht also der zu ignorierenden id .
Jetzt müssen Ihre PUT|PATCH und POST Überprüfungsregeln nicht die gleichen sein. Definieren Sie Ihre Logik, die Ihren Anforderungen entspricht. Mit dieser Technik können Sie die benutzerdefinierten Nachrichten wiederverwenden, die Sie möglicherweise in der benutzerdefinierten Formularanforderungsklasse definiert haben.
Fehlermeldungen
Anpassen von Fehlermeldungen
Die Dateien /resources/lang/[lang]/validation.php enthalten die /resources/lang/[lang]/validation.php , die vom /resources/lang/[lang]/validation.php verwendet werden sollen. Sie können sie nach Bedarf bearbeiten.
Die meisten von ihnen haben Platzhalter, die beim Generieren der Fehlermeldung automatisch ersetzt werden.
Zum Beispiel in 'required' => 'The :attribute field is required.' , Der Platzhalter für das :attribute wird durch den Feldnamen ersetzt (alternativ können Sie auch den Anzeigewert jedes Felds im attributes Array in derselben Datei anpassen).
Beispiel
Nachrichtenkonfiguration:
https://riptutorial.com/de/home 195
'required' => 'Please inform your :attribute.', //... 'attributes => [ 'email' => 'E-Mail address' ]
Regeln:
`email' => `required`
resultierende Fehlermeldung:
"Bitte informieren Sie Ihre E-Mail-Adresse."
Anpassen von Fehlermeldungen innerhalb einer Request-Klasse
Die Request-Klasse hat Zugriff auf eine messages() -Methode, die ein Array zurückgeben soll. Dies kann zum Überschreiben von Nachrichten verwendet werden, ohne in die lang-Dateien gehen zu müssen. Wenn wir beispielsweise über eine benutzerdefinierte file_exists , können Sie die unten stehenden Meldungen verwenden.
class SampleRequest extends Request { /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'image' => 'required|file_exists' ]; } /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } public function messages() { return [ 'image.file_exists' => 'That file no longer exists or is invalid' ]; }
https://riptutorial.com/de/home 196
}
Fehlermeldungen anzeigen
Die Validierungsfehler werden in die Sitzung geflasht und sind auch in der Variablen $errors verfügbar, die automatisch für alle Ansichten freigegeben wird.
Beispiel für die Anzeige der Fehler in einer Blade-Ansicht:
@if (count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
Benutzerdefinierte Validierungsregeln
Wenn Sie eine benutzerdefinierte Validierungsregel erstellen möchten, können Sie dies beispielsweise in der boot Methode eines Service Providers über die Validator-Fassade tun.
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Validator; class AppServiceProvider extends ServiceProvider { public function boot() { Validator::extend('starts_with', function($attribute, $value, $parameters, $validator) { return \Illuminate\Support\Str::startsWith($value, $parameters[0]); }); Validator::replacer('starts_with', function($message, $attribute, $rule, $parameters) { return str_replace(':needle', $parameters[0], $message); }); } }
Die extend Methode nimmt eine Zeichenfolge, die der Name der Regel ist, und eine Funktion, der wiederum der Name des Attributs, der zu überprüfende Wert, ein Array der Regelparameter und die Validierungsinstanz übergeben werden die Validierung ist bestanden. In diesem Beispiel überprüfen wir, ob die Wertzeichenfolge mit einer bestimmten Teilzeichenfolge beginnt.
Die Fehlermeldung für diese benutzerdefinierte Regel kann wie üblich in der Datei
https://riptutorial.com/de/home 197
/resources/lang/[lang]/validation.php werden und Platzhalter enthalten, z. B. für Parameterwerte:
'starts_with' => 'The :attribute must start with :needle.'
Die replacer nimmt eine Zeichenfolge an, die den Namen der Regel darstellt, und eine Funktion, der (vor dem Ersetzen) die ursprüngliche Nachricht übergeben wird, der Name des Attributs, der Name der Regel und ein Array der Regelparameter und sollte die Nachricht nach dem Ersetzen der Platzhalter nach Bedarf zurückgeben.
Verwenden Sie diese Regel wie jede andere:
$this->validate($request, [ 'phone_number' => 'required|starts_with:+' ]);
Validierung online lesen: https://riptutorial.com/de/laravel/topic/1310/validierung
https://riptutorial.com/de/home 198
Kapitel 62: Veranstaltungen und Zuhörer
Examples
Verwenden von Ereignissen und Listenern zum Senden von E-Mails an einen neuen registrierten Benutzer
Die Ereignisse von Laravel ermöglichen die Implementierung des Observer-Musters. Dies kann verwendet werden, um eine Begrüßungs-E-Mail an einen Benutzer zu senden, wenn er sich in Ihrer Anwendung registriert.
Neue Ereignisse und Listener können mit dem handwerklichen Befehlszeilenprogramm generiert werden, nachdem das Ereignis und der jeweilige Listener in App\Providers\EventServiceProvider Klasse App\Providers\EventServiceProvider .
protected $listen = [ 'App\Events\NewUserRegistered' => [ 'App\Listeners\SendWelcomeEmail', ], ];
Alternative Notation:
protected $listen = [ \App\Events\NewUserRegistered::class => [ \App\Listeners\SendWelcomeEmail::class, ], ];
php artisan generate:event nun php artisan generate:event . Dieser Befehl generiert alle entsprechenden Ereignisse und Listener, die oben in den Verzeichnissen App\Events und App\Listeners sind.
Wir können mehrere Zuhörer für ein einzelnes Ereignis haben
protected $listen = [ 'Event' => [ 'Listner1', 'Listener2' ], ];
NewUserRegistered ist nur eine Wrapper-Klasse für das neu registrierte Benutzermodell:
class NewUserRegistered extends Event { use SerializesModels; public $user;
https://riptutorial.com/de/home 199
/** * Create a new event instance. * * @return void */ public function __construct(User $user) { $this->user = $user; } }
Dieses Event wird vom SendWelcomeEmail Listener verarbeitet:
class SendWelcomeEmail { /** * Handle the event. * * @param NewUserRegistered $event */ public function handle(NewUserRegistered $event) { //send the welcome email to the user $user = $event->user; Mail::send('emails.welcome', ['user' => $user], function ($message) use ($user) { $message->from('[email protected]', 'John Doe'); $message->subject('Welcome aboard '.$user->name.'!'); $message->to($user->email); }); } }
Der letzte Schritt ist das Aufrufen / Auslösen des Ereignisses, wenn sich ein neuer Benutzer registriert. Dies kann in der Steuerung, im Befehl oder im Dienst erfolgen, wo immer Sie die Benutzerregistrierungslogik implementieren:
event(new NewUserRegistered($user));
Veranstaltungen und Zuhörer online lesen: https://riptutorial.com/de/laravel/topic/4687/veranstaltungen-und-zuhorer
https://riptutorial.com/de/home 200
Kapitel 63: Verwenden Sie Feldnamen in Eloquent
Verwenden Sie Feldnamen in Eloquent online lesen: https://riptutorial.com/de/laravel/topic/7927/verwenden-sie-feldnamen-in-eloquent
https://riptutorial.com/de/home 201
Kapitel 64: Verzeichnisaufbau
Examples
Ändern Sie das Standard-App-Verzeichnis
Es gibt Anwendungsfälle, in denen Sie Ihr App-Verzeichnis möglicherweise in etwas anderes umbenennen möchten. In Laravel4 können Sie einfach einen Konfigurationseintrag ändern. Hier ist eine Möglichkeit, dies in Laravel5 zu tun.
In diesem Beispiel wird das app Verzeichnis in src .
Anwendungsklasse überschreiben
Der Verzeichnisname app ist in der Kernanwendungsklasse fest codiert und muss daher überschrieben werden. Erstellen Sie eine neue Datei Application.php . Ich ziehe es vor, meine im src Verzeichnis zu src (das Verzeichnis, mit dem wir die App ersetzen werden), aber Sie können sie an anderer Stelle ablegen.
So sollte die überschriebene Klasse aussehen. Wenn Sie einen anderen Namen wünschen, ändern Sie einfach den String src in einen anderen Namen.
namespace App; class Application extends \Illuminate\Foundation\Application { /** * @inheritdoc */ public function path($path = '') { return $this->basePath . DIRECTORY_SEPARATOR . 'src' . ($path ? DIRECTORY_SEPARATOR . $path : $path); } }
Speicher die Datei. Damit sind wir fertig.
Die neue Klasse aufrufen
Öffnen Sie bootstrap/app.php und bootstrap/app.php
$app = new Illuminate\Foundation\Application( realpath(__DIR__.'/../') );
Wir werden es damit ersetzen
https://riptutorial.com/de/home 202
$app = new App\Application( realpath(__DIR__.'/../') );
Komponist
Öffnen Sie Ihre composer.json Datei und ändern Sie das automatische Laden an Ihren neuen Speicherort
"psr-4": { "App\\": "src/" }
In der Befehlszeile sollten Sie schließlich composer dump-autoload ausführen, und Ihre App sollte über das src Verzeichnis src .
Ändern Sie das Controllerverzeichnis
Wenn wir das Controllers ändern wollen, brauchen wir:
Verschieben und / oder benennen Sie das Standard- Controllers Verzeichnis um, wo wir es möchten. Zum Beispiel von app/Http/Controllers zu app/Controllers
1.
Aktualisieren Sie alle Namespaces der Dateien im Ordner " Controllers ", sodass sie sich an den neuen Pfad halten und den PSR-4-spezifischen Wert beachten.
2.
Ändern Sie den Namespace, der auf die Datei routes.php angewendet wird, indem Sie app\Providers\RouteServiceProvider.php und ändern Sie dies:
3.
protected $namespace = 'App\Http\Controllers';
zu diesem:
protected $namespace = 'App\Controllers';
Verzeichnisaufbau online lesen: https://riptutorial.com/de/laravel/topic/3153/verzeichnisaufbau
https://riptutorial.com/de/home 203
Kapitel 65: Warteschlangen
Einführung
Mithilfe von Warteschlangen kann Ihre Anwendung Zeitaufträge reservieren, die zeitaufwändig für die Verarbeitung durch einen Hintergrundprozess sind.
Examples
Anwendungsfälle
Wenn Sie beispielsweise eine E-Mail an einen Kunden senden, nachdem Sie eine Aufgabe gestartet haben, leiten Sie den Benutzer sofort auf die nächste Seite um, während Sie die E-Mail in die Warteschlange stellen, um sie im Hintergrund zu senden. Dies beschleunigt die Ladezeit für die nächste Seite, da das Senden einer E-Mail manchmal mehrere Sekunden oder länger dauern kann.
Ein anderes Beispiel wäre die Aktualisierung eines Lagersystems, nachdem ein Kunde mit seiner Bestellung ausgecheckt hat. Anstatt auf den Abschluss der API-Aufrufe zu warten, was einige Sekunden dauern kann, können Sie den Benutzer sofort zur Seite "Checkout-Erfolg" umleiten, während die API-Aufrufe im Hintergrund in die Warteschlange gestellt werden.
Warteschlangentreiberkonfiguration
Jeder Warteschlangentreiber von Laravel wird über die Datei config/queue.php konfiguriert. Ein Warteschlangentreiber ist der Handler, mit dem verwaltet wird, wie ein Auftrag in der Warteschlange ausgeführt wird, ob die Aufträge erfolgreich waren oder fehlgeschlagen sind, und der Auftrag wird erneut versucht, sofern dies konfiguriert ist.
Laravel unterstützt standardmäßig die folgenden Warteschlangentreiber:
sync
Sync oder synchron ist der Standard-Warteschlangentreiber, der einen Job in der Warteschlange in Ihrem vorhandenen Prozess ausführt. Wenn dieser Treiber aktiviert ist, haben Sie praktisch keine Warteschlange, da der Job in der Warteschlange sofort ausgeführt wird. Dies ist für lokale oder Testzwecke hilfreich, wird jedoch offensichtlich nicht für die Produktion empfohlen, da dadurch der Leistungsvorteil beim Einrichten der Warteschlange entfällt.
database
Dieser Treiber speichert Aufträge in der Warteschlange in der Datenbank. Bevor Sie diesen Treiber aktivieren, müssen Sie Datenbanktabellen erstellen, um Ihre in der Warteschlange befindlichen und fehlgeschlagenen Jobs zu speichern:
https://riptutorial.com/de/home 204
php artisan queue:table php artisan migrate
sqs
Dieser Warteschlangentreiber verwendet den Simple Queue Service von Amazon zum Verwalten von Jobs in der Warteschlange. Bevor Sie diesen Job aktivieren, müssen Sie das folgende Composer-Paket installieren: aws/aws-sdk-php ~3.0
Beachten Sie auch, dass Amazon SQS bei einer Verzögerung von Warteschlangenjobs nur eine maximale Verzögerung von 15 Minuten unterstützt.
iron
Diese Warteschlangentreiber verwenden Iron zum Verwalten von Jobs in der Warteschlange.
redis
Dieser Warteschlangentreiber verwendet eine Instanz von Redis zum Verwalten von Jobs in der Warteschlange. Bevor Sie diesen Warteschlangentreiber verwenden, müssen Sie eine Kopie von Redis konfigurieren und die folgende Abhängigkeit vom predis/predis ~1.0 installieren: predis/predis ~1.0
beanstalkd
Dieser Warteschlangentreiber verwendet eine Instanz von Beanstalk zum Verwalten von Jobs in der Warteschlange. Bevor Sie diesen Warteschlangentreiber verwenden, müssen Sie eine Kopie von Beanstalk konfigurieren und die folgende Composer-Abhängigkeit installieren: pda/pheanstalk ~3.0
null
Durch die Angabe von null als Warteschlangentreiber werden alle Aufträge in der Warteschlange gelöscht.
Warteschlangen online lesen: https://riptutorial.com/de/laravel/topic/2651/warteschlangen
https://riptutorial.com/de/home 205
Credits
S. No
Kapitel Contributors
1 Erste Schritte mit Laravel
alepeino, Alphonsus, boroboris, Colin Herzog, Community, Ed Rands, Evgeniy Maynagashev, Gaurav, Imam Assidiqqi, James, Ketan Akbari, Kovah, Lance Pioch, Marek Skiba, Martin Bean, Misa Lazovic, nyedidikeke, Oliver Adria, Prakash, rap-2-h, Ru Chern Chong, SeinopSys, Tatranskymedved, Tim
2Ändern Sie das Standardroutingverhalten in Laravel 5.2.31 +
Frank Provost
3 Anfragen Ian, Jerodev, RamenChef, Rubens Mariuzzo
4 Aufgabenplanung Jonathon
5 AussaatA. Raza, Alphonsus, Ian, Imam Assidiqqi, Kyslik, SupFrost, whoan
6 Authentifizierung Aykut CAN, Imam Assidiqqi
7Benennen von Dateien beim Hochladen mit Laravel unter Windows
Donkarnash, RamenChef
8Benutzerdefinierte Helferfunktion
Ian, Luceos, rap-2-h, Raunak Gupta
9 Beobachter matiaslauriti, Szenis
10Berechtigungen für die Speicherung
A. Raza
aimme, alepeino, Alessandro Bassi, Alex Harris, Alfa, Alphonsus, andretzermias, andrewtweber, Andrey Lutskevich, aynber, Buckwheat, Casper Spruit, Dancia, Dipesh Poudel, Ian, Imam Assidiqqi, James, James, jedrzej.kurylo, John Slegers, Josh Rumbut, Kaspars, Ketan Akbari, KuKeC, littleswany, Lykegenes, Maantje, Mahmood, Marco Aurélio Deleu, marcus.ramsden, Marek Skiba, Martin Bean, matiaslauriti, MM2, Nicklas Kevin Frank, Niklas Modess, Nyan Lynn Htut, patricus, Pete Houston, Phroggyy, Prisoner Raju, RamenChef, rap-2-h, Rubens Mariuzzo,
11 Beredt
https://riptutorial.com/de/home 206
Sagar Naliyapara, Samsquanch, Sergio Guillen Mantilla, Tim, tkausl, whoan, Yasin Patel
12 Blade-Vorlagen
A. Raza, agleis, Akshay Khale, alepeino, Alessandro Bassi, Benubird, cbaconnier, Christophvh, Imam Assidiqqi, matiaslauriti, Nauman Zafar, rap-2-h, Safoor Safdar, Tosho Trajanov, yogesh
13 Controller Ru Chern Chong
14 Cron-Grundlagen A. Raza
15CustomException-Klasse in Laravel
ashish bansal
16Dateisystem / Cloud-Speicher
Imam Assidiqqi, Nitish Kumar, Paulo Laxamana
17 DatenbankA. Raza, adam, caoglish, Ian, Iftikhar uddin, Imam Assidiqqi, liamja, Panagiotis Koursaris, RamenChef, Rubens Mariuzzo, Sanzeeb Aryal, Vucko
18 Datenbank SeedingAchraf Khouadja, Andrew Nolan, Dan Johnson, Isma, Kyslik, Marco Aurélio Deleu
19 DatenbankmigrationenChris, Chris White, Hovsep, hschin, Iftikhar uddin, Imam Assidiqqi, Kaspars, liamja, littleswany, mnoronha, Nauman Zafar, Panagiotis Koursaris, Paulo Freitas, Vucko
20 Dienstleistungen A. Raza, El_Matella
21Domainübergreifende Anfrage
Imam Assidiqqi, Suraj
22 Einführung in Laravel-5.2A. Raza, ashish bansal, Community, Edward Palen, Ivanka Todorova, Shubhamoy
23 Einführung in Laravel-5.3 Ian
24Eloquent: Accessors & Mutators
Diego Souza, Kyslik
25 Eloquent: BeziehungAdvaith, aimme, Alex Harris, Alphonsus, bhill77, Imam Assidiqqi, Ketan Akbari, Phroggyy, rap-2-h, Ru Chern Chong, Zulfiqar Tariq
26 Eloquent: Modell
Aeolingamenfel, alepeino, Alex Harris, Imam Assidiqqi, John Slegers, Kaspars, littleswany, Marco Aurélio Deleu, marcus.ramsden, Marek Skiba, matiaslauriti, Nicklas Kevin Frank, Samsquanch, Tim
https://riptutorial.com/de/home 207
27Entfernen Sie public von URL in Laravel
A. Raza, Rana Ghosh, ultrasamad
28Erste Schritte mit Laravel-5.3
A. Raza, Advaith, Community, davejal, Deathstorm, Manish, Matthew Beckman, Robin Dirksen, Shital Jachak
29 Fehlerbehandlung Isma, Kyslik, RamenChef, Rubens Mariuzzo
30Formularanforderung (en)
Bookeater, Ian, John Roca, Kyslik, RamenChef
31 Genehmigung Daniel Verem
32 HandwerkerAlessandro Bassi, Gaurav, Harshal Limaye, Himanshu Raval, Imam Assidiqqi, Kaspars, Laurel, Rubens Mariuzzo, Safoor Safdar, Sagar Naliyapara, SeinopSys
33Häufige Probleme und schnelle Korrekturen
Nauman Zafar
34 Helfer aimme
35 HTML und Form Builder alepeino, Casper Spruit, Himanshu Raval, Prakash
36 Installation
A. Raza, alepeino, Alphonsus, Black, boroboris, Gaurav, Imam Assidiqqi, James, Ketan Akbari, Lance Pioch, Marek Skiba, Martin Bean, nyedidikeke, PaladiN, Prakash, rap-2-h, Ru Chern Chong, Sagar Naliyapara, SeinopSys, Tim
37 InstallationsanleitungAdvaith, Amarnasan, aynber, Community, davejal, Dov Benyomin Sohacheski, Imam Assidiqqi, PaladiN, rap-2-h, Ru Chern Chong
38 KammerdienerDavid Lartey, Dov Benyomin Sohacheski, Imam Assidiqqi, Misa Lazovic, Ru Chern Chong, Shog9
39 Kassierer littleswany, RamenChef
40 Konstanten Mubashar Iqbal, Oscar David, Zakaria Acharki
41 Laravel Docker Dov Benyomin Sohacheski
42 Laravel-PaketeCasper Spruit, Imam Assidiqqi, Ketan Akbari, rap-2-h, Ru Chern Chong, Tosho Trajanov
43 Lumen-Rahmen maksbd19
44 Mail Yohanan Baruchel
45Makros in einer eloquenten Beziehung
Alex Casajuana, Vikash
https://riptutorial.com/de/home 208
46Mehrere DB-Verbindungen in Laravel
4444, A. Raza, Rana Ghosh
47 Middleware Alex Harris, Kaspars, Kyslik, Moppo, Pistachio
48 Nützliche Links Jakub Kratina
49 Prominente Jonathon, Marco Aurélio Deleu
50 Richtlinien Tosho Trajanov
51 Routenmodellbindung A. Raza, GiuServ, Vikash
52 RoutingA. Raza, alepeino, Alessandro Bassi, Alex Juchem, beznez, Dwight, Ilker Mutlu, Imam Assidiqqi, jedrzej.kurylo, Kyslik, Milan Maharjan, Rubens Mariuzzo, SeinopSys, Vucko
53 Sammlungen
A. Raza, Alessandro Bassi, Alex Harris, bhill77, caoglish, Dummy Code, Gras Double, Ian, Imam Assidiqqi, Josh Rumbut, Karim Geiger, matiaslauriti, Nicklas Kevin Frank, Ozzy, rap-2-h, simonhamp, Vucko
54 Seitennummerierung Himanshu Raval, Iftikhar uddin
55Sparkpost-Integration mit Laravel 5.4
Alvin Chettiar
56Stellen Sie die Laravel 5-App auf Shared Hosting unter Linux Server bereit
Donkarnash, Gayan, Imam Assidiqqi, Kyslik, PassionInfinite, Pete Houston, rap-2-h, Ru Chern Chong, Stojan Kukrika, ultrasamad
57 TestenAlessandro Bassi, Brayniverse, caoglish, Julian Minde, Kyslik, rap-2-h, Sven
58Token Mismatch Error in AJAX
Pankaj Makwana
59 Validierung
A. Raza, alepeino, Alessandro Bassi, Alex Harris, Andrew Nolan, happyhardik, Himanshu Raval, Ian, Iftikhar uddin, John Slegers, Marco Aurélio Deleu, matiaslauriti, rap-2-h, Rubens Mariuzzo, Safoor Safdar, Sagar Naliyapara, Stephen Leppik, sun, Vucko
60Veranstaltungen und Zuhörer
Bharat Geleda, matiaslauriti, Nauman Zafar
61Verwenden Sie Feldnamen in Eloquent
MM2
62 Verzeichnisaufbau Kaspars, Moppo, RamenChef
https://riptutorial.com/de/home 209
63 Warteschlangen Alessandro Bassi, Kyslik
https://riptutorial.com/de/home 210