Laravel Unwrapped Session, Auth und Cache

In den letzten Jahren hat sich Laravel zu einem der bekanntesten Frameworks entwickelt, die Software-Ingenieure zum Erstellen ihrer Webanwendungen verwenden. Ähnlich wie die Popularität, die CodeIgniter in seiner Blütezeit erlebte, wurde Laravel für seine Benutzerfreundlichkeit, Freundlichkeit für Anfänger und das Einhalten von Branchenstandards gelobt.

Einführung

Eine Sache, die nicht viele Programmierer nutzen, ist das komponentenbasierte System von Laravel. Seit der Umstellung auf Komponenten, die auf Komponisten basieren, ist Laravel 4 zu einem sehr modularen System geworden, ähnlich wie die Reife älterer Frameworks wie Symfony. Dies nennt man das Erleuchten Eine Gruppe von Komponenten, die meiner Meinung nach nicht das eigentliche Framework selbst ist, sondern eine Zusammenstellung von Bibliotheken, die ein Framework möglicherweise verwenden kann. Das tatsächliche Gerüst von Laravel wird durch die Laravel-Skelettanwendung (auf der Laravel / Laravel GitHub-Repository), das diese Komponenten zum Erstellen einer Webanwendung verwendet.

In diesem Lernprogramm werden wir in eine Gruppe dieser Komponenten eintauchen und erfahren, wie sie funktionieren, wie sie vom Framework verwendet werden und wie wir ihre Funktionalität erweitern können.

Die Sitzungskomponente

Die Laravel Session-Komponente verarbeitet Sitzungen für die Webanwendung. Es verwendet ein Treiber-basiertes System namens Laravel Manager, das sowohl als Factory als auch als Wrapper für den in der Konfigurationsdatei festgelegten Treiber fungiert. Zum jetzigen Zeitpunkt hat die Session-Komponente Treiber für:

  • Datei - ein dateibasierter Sitzungstreiber, in dem Sitzungsdaten in einer verschlüsselten Datei gespeichert werden.
  • Plätzchen - Ein Cookie-basierter Sitzungstreiber, bei dem Sitzungsdaten in den Cookies des Benutzers verschlüsselt werden.
  • Datenbank - Sitzungsdaten werden in der Datenbank gespeichert, die für die Anwendung konfiguriert ist.
  • apc - Sitzungsdaten werden in APC gespeichert.
  • Memcached - Sitzungsdaten werden in Memcached gespeichert.
  • Redis - Sitzungsdaten werden in Redis gespeichert.
  • Array - Sitzungsdaten werden in einem PHP-Array gespeichert. Beachten Sie, dass der Array-Sitzungstreiber keine Persistenz unterstützt und normalerweise nur in Konsolenbefehlen verwendet wird.

Dienstleister

Die meisten Laravel-Benutzer wissen nicht, aber ein großer Teil davon, wie Laravel arbeitet, liegt bei seinen Diensteanbietern. Sie sind im Wesentlichen Bootstrap-Dateien für jede Komponente, und sie sind ausreichend abstrahiert, sodass Benutzer beliebige Komponenten auf beliebige Weise bootstrapieren können.

Eine grobe Erklärung, wie das funktioniert, finden Sie unten:

  1. Die Laravel Application-Komponente wird gestartet. Dies ist der Haupttreiber des gesamten Frameworks. Er ist für die Bearbeitung der HTTP-Anforderung, die Ausführung der Dienstanbieter und für die Abhängigkeit des Frameworks verantwortlich.
  2. Sobald ein Dienstanbieter ausgeführt wird, ist es der registrieren Methode wird aufgerufen. Dies ermöglicht uns, die gewünschte Komponente zu instanziieren.
    • Beachten Sie, dass alle Dienstanbieter Zugriff auf die Hauptanwendung von Laravel haben (über $ this-> app), wodurch Dienstanbieter Instanzen der aufgelösten Klassen in den Abhängigkeitscontainer verschieben können.
  3. Sobald diese Abhängigkeiten geladen sind, können wir sie frei verwenden, indem wir den Container beispielsweise über das Fassadensystem von Laravel aufrufen, App :: machen.

Zurück zu den Sitzungen, werfen wir einen Blick auf die SessionServiceProivider:

 / ** * Registrieren Sie die Session Manager-Instanz. * * @return void * / protected function registerSessionManager () $ this-> app-> bindShared ('session', Funktion ($ app) return new SessionManager ($ app););  / ** * Registrieren Sie die Sitzungstreiberinstanz. * * @return void * / protected function registerSessionDriver () $ this-> app-> bindShared ('session.store', function ($ app) // Zuerst erstellen wir den Sitzungsmanager, der für das / verantwortlich ist. / Erstellung der verschiedenen Sitzungstreiber, wenn sie von der // Anwendungsinstanz benötigt werden, und löst sie auf einer verzögerten Lastbasis aus. $ manager = $ app ['session']; return $ manager-> driver ();) ; 

Diese beiden Methoden werden von der aufgerufen registrieren() Funktion. Der erste, registerSessionManager (), wird aufgerufen, um zunächst das zu registrieren SessionManager. Diese Klasse erweitert die Manager dass ich oben erwähnt habe. Der zweite, registerSessionDriver () registriert einen Sitzungshandler für den Manager, basierend auf den von uns konfigurierten Einstellungen. Dies ruft diese Methode schließlich in auf Illuminate \ Support \ Manager Klasse:

/ ** * Erstellt eine neue Treiberinstanz. * * @param string $ driver * @return gemischt * * @hrows \ InvalidArgumentException * / protected function createDriver ($ driver) $ method = 'create'.ucfirst ($ driver).' driver '; // Wir prüfen, ob für den angegebenen Treiber eine Creator-Methode vorhanden ist. Andernfalls prüfen wir // nach einem benutzerdefinierten Treiberersteller, der es Entwicklern ermöglicht, // Treiber unter Verwendung ihres eigenen benutzerdefinierten Treibererstellers Closure zu erstellen. if (isset ($ this-> customCreators [$ driver])) return $ this-> callCustomCreator ($ driver);  elseif (method_exists ($ this, $ method)) return $ this -> $ method ();  Neue \ InvalidArgumentException werfen ("Treiber [$ driver] wird nicht unterstützt."); 

Hier sehen wir, dass basierend auf dem Namen des Treibers aus der Konfigurationsdatei eine bestimmte Methode aufgerufen wird. Wenn wir es so konfiguriert haben, dass es verwendet wird Datei Session Handler, wird diese Methode in der aufgerufen SessionManager Klasse:

/ ** * Eine Instanz des Dateisitzungstreibers erstellen. * * @return \ Illuminate \ Session \ Store * / protected function createFileDriver () return $ this-> createNativeDriver ();  / ** * Eine Instanz des Dateisitzungstreibers erstellen. * * @return \ Illuminate \ Session \ Store * / protected function createNativeDriver () $ path = $ this-> app ['config'] ['session.files']; $ this-> buildSession zurückgeben (neuer FileSessionHandler ($ this-> app ['files'], $ path)); 

Die Fahrerklasse wird dann in eine eingeblendet Geschäft Klasse, die für das Aufrufen der tatsächlichen Sitzungsmethoden verantwortlich ist. Dies lässt uns die Implementierung von SessionHandlerInterface von der SPL in die Fahrer, die Geschäft Klasse erleichtert es.

Erstellen eines eigenen Session Handlers

Lassen Sie uns einen eigenen Session-Handler erstellen, einen MongoDB-Session-Handler. Zuerst müssen wir eine erstellen MongoSessionHandler in einer neu installierten Laravel-Projektinstanz. (Wir leihen uns stark aus Symfony \ Component \ HttpFoundation \ Session \ Storage \ Handler \ MongoDbSessionHandler) .:

config = $ config; $ connection_string = 'mongodb: //'; if (! empty ($ this-> config ['username']) &&! empty ($ this-> config ['password'])) $ connection_string. = "$ this-> config ['user'] : $ this-> config ['password'] @ ";  $ connection_string. = "$ this-> config ['host']"; $ this-> connection = new Mongo ($ connection_string); $ this-> collection = $ this-> connection-> selectCollection ($ this-> config ['Datenbank'], $ this-> config ['collection']);  / ** * @heritDoc * / public Funktion open ($ savePath, $ sessionName) return true;  / ** * @inheritDoc * / public function close () return true;  / ** * @heritDoc * / public Funktion read ($ sessionId) $ session_data = $ this-> collection-> findOne (array ('_id' => $ sessionId,)); if (is_null ($ session_data)) return "; else return $ session_data ['session_data'] -> bin; / ** * @heritDoc * / public Funktion write ($ sessionId, $ data)  $ this-> collection-> update (array ('_id' => $ sessionId), array ('$ set' => array ('session_data' => neue MongoBinData ($ data, MongoBinData :: BYTE_ARRAY), 'timestamp' => new MongoDate (),)), array ('upsert' => true, 'multiple' => false)); / ** * @heritDoc * / public-Funktion destroy ($ sessionId) $ this- > collection-> remove (array ('_id' => $ sessionId)); return true; / ** * @heritDoc * / public-Funktion gc ($ lifetime) $ time = neues MongoDate (time () - $ lifetime); $ this-> collection-> remove (array ('timestamp' => array ('$ lt' => $ time),)); true zurückgeben; 

Sie sollten dies im speichern Verkäufer / Laravel / Framework / src / Illuminate / Session Mappe. Im Rahmen dieses Projekts werden wir es hier angeben, aber idealerweise sollte sich diese Datei in ihrem eigenen Bibliotheksnamensraum befinden.

Als nächstes müssen wir sicherstellen, dass die Manager Klasse kann diesen Treiber aufrufen. Wir können dies durch die Verwendung der Manager :: erweitern Methode. Öffnen Verkäufer / Laravel / Framework / src / Illuminate / Session / SessionServiceProvider.php und fügen Sie den folgenden Code hinzu. Im Idealfall sollten wir den Dienstanbieter erweitern. Dies ist jedoch nicht in diesem Tutorial enthalten.

/ ** * Mongo Driver-Callback einrichten * * @return void * / public function setupMongoDriver () $ manager = $ this-> app ['session']; $ manager-> extend ('mongo', Funktion ($ app) neuen MongoSessionHandler zurückgeben (array ('host' => $ app ['config'] -> get ('session.mongo.host'), 'username' => $ app ['config'] -> get ('session.mongo.username'), 'password' => $ app ['config'] -> get ('session.mongo.password'), 'Datenbank' => $ app ['config'] -> get ('session.mongo.database'), 'collection' => $ app ['config'] -> get ('session.mongo.collection'))); ); 

Stellen Sie sicher, dass Sie das aktualisieren registrieren() Methode zum Aufruf dieser Methode:

/ ** * Dienstanbieter registrieren. * * @return void * / public function register () $ this-> setupDefaultDriver (); $ this-> registerSessionManager (); $ this-> setupMongoDriver (); $ this-> registerSessionDriver (); 

Als Nächstes müssen wir die Mongo DB-Konfiguration definieren. Öffnen app / config / session.php und definieren Sie die folgenden Konfigurationseinstellungen:

/ ** * Mongo DB-Einstellungen * / 'mongo' => array ('host' => '127.0.0.1', 'username' => ", 'password' =>", 'database' => 'laravel', 'collection' => 'laravel_session_collection')

Während wir uns in dieser Datei befinden, sollten wir auch die Treiber Konfiguration oben:

"Fahrer" => "Mongo"

Versuchen Sie jetzt, auf die Hauptseite zuzugreifen (normalerweise, localhost / jemandem ordner / öffentlich). Wenn diese Seite geladen wird, ohne das anzuzeigen HOPPLA Glückwunsch! Wir haben erfolgreich einen brandneuen Session-Treiber erstellt! Testen Sie es, indem Sie einige Dummy-Daten in der Sitzung einstellen, über Session :: set () und dann per Echo zurück Session :: get ().

Die Auth-Komponente

Die Laravel Auth-Komponente übernimmt die Benutzerauthentifizierung für das Framework sowie die Kennwortverwaltung. Was die Laravel-Komponente hier getan hat, ist die Erstellung einer abstrakten Interpretation des typischen Benutzerverwaltungssystems, das in den meisten Webanwendungen verwendet werden kann, was wiederum dem Programmierer hilft, ein Anmeldesystem leicht zu implementieren. Wie die Session-Komponente wird auch der Laravel-Manager verwendet. Derzeit enthält die Auth-Komponente Treiber für:

  • beredt - Hierfür wird der eingebaute ORM von Laravel verwendet Beredt. Es nutzt auch das vorgefertigte User.php Klasse in der Modelle Mappe.
  • Datenbank - Hierbei wird die standardmäßig konfigurierte Datenbankverbindung verwendet. Es nutzt a GenericUser Klasse für den Zugriff auf die Benutzerdaten.

Da folgt die gleiche Implementierung wie beim Session Komponente ist der Dienstanbieter sehr ähnlich dem, was wir oben gesehen haben:

/ ** * Dienstanbieter registrieren. * * @return void * / public function register () $ this-> app-> bindShared ('auth', function ($ app) // Wenn der Authentifizierungsdienst tatsächlich vom Entwickler angefordert wurde, werden wir // einstellen eine Variable in der Anwendung, die dies angibt, damit wir // wissen können, dass wir nach dem Ereignis eventuelle in der Warteschlange befindliche Cookies später setzen müssen: $ app ['auth.loaded'] = true; return new AuthManager ($ app);) ; 

Hier können wir sehen, dass es im Grunde eine AuthManager Klasse, die sich um jeden Fahrer dreht, den wir verwenden, und als Fabrik dafür fungieren. In der AuthManager, es erstellt wieder den entsprechenden Treiber, um einen herumgelegt Bewachen Klasse, die genauso wirkt wie die Geschäft Klasse aus Session.

Eigene Auth-Handler erstellen

Beginnen wir mit dem Erstellen eines MongoUserProvider:

config = $ config; $ connection_string = 'mongodb: //'; if (! empty ($ this-> config ['username']) &&! empty ($ this-> config ['password'])) $ connection_string. = "$ this-> config ['user'] : $ this-> config ['password'] @ ";  $ connection_string. = "$ this-> config ['host']"; $ this-> connection = new Mongo ($ connection_string); $ this-> collection = $ this-> connection-> selectCollection ($ this-> config ['Datenbank'], $ this-> config ['collection']);  / ** * Ruft einen Benutzer anhand seiner eindeutigen Kennung ab. * * @param gemischt $ bezeichner * @return \ Illuminate \ Auth \ UserInterface | null * / public Funktion retrieveById ($ Bezeichner) $ user_data = $ this-> collection-> findOne (array ('_id' => $ bezeichner, )); if (! is_null ($ user_data)) return new GenericUser ((array) $ user_data);  / ** * Ruft einen Benutzer anhand der angegebenen Anmeldeinformationen ab. * * @param array $ credentials * @return \ Illuminate \ Auth \ UserInterface | null * / public Funktion retrieveByCredentials (Array $ credentials) // Versuchen Sie, zuerst den Benutzer zu suchen, ungeachtet des Kennworts. // Wir machen das im validateCredentials-Methode if (isset ($ credentials ['password'])) unset ($ credentials ['password']);  $ user_data = $ this-> collection-> findOne ($ credentials); if (! is_null ($ user_data)) return new GenericUser ((array) $ user_data);  / ** * Überprüfe einen Benutzer anhand der angegebenen Anmeldeinformationen. * * @param \ Illuminate \ Auth \ UserInterface $ user * @param array $ credentials * @return bool * / public function validateCredentials (UserInterface $ user, Array $ credentials) if (! isset ($ credentials ['password'])) )  falsch zurückgeben;  return ($ credentials ['password'] === $ user-> getAuthPassword ()); 

Es ist wichtig, hier zu beachten, dass ich nicht mit einem Hash-Kennwort prüfe. Dies wurde der Einfachheit halber vorgenommen, um es uns einfacher zu machen, Dummy-Daten zu erstellen und diese später zu testen. Im Produktionscode müssen Sie sicherstellen, dass das Kennwort mit einem Hash versehen wird. Besuche die Illuminate \ Auth \ DatabaseUserProvider Klasse für ein gutes Beispiel, wie das geht.

Anschließend müssen wir unseren benutzerdefinierten Treiber-Callback auf der registrieren AuthManager. Dazu müssen wir den Dienstanbieter aktualisieren registrieren Methode:

/ ** * Dienstanbieter registrieren. * * @return void * / public function register () $ this-> app-> bindShared ('auth', function ($ app) // Wenn der Authentifizierungsdienst tatsächlich vom Entwickler angefordert wurde, werden wir // einstellen eine Variable in der Anwendung, die dies angibt, damit wir // wissen können, dass wir nach dem Ereignis eventuelle in der Warteschlange befindliche Cookies festlegen müssen: $ app ['auth.loaded'] = true; $ auth_manager = new AuthManager ($ app); $ auth_manager-> extend ('mongo', Funktion ($ app) neuen MongoUserProvider zurückgeben (array ('host' => $ app ['config'] -> get ('auth.mongo.host'), 'username' => $ app ['config'] -> get ('auth.mongo.username'), 'password' => $ app ['config'] -> get ('auth.mongo.password'), 'Datenbank' => $ app ['config'] -> get ('auth.mongo.database'), 'collection' => $ app ['config'] -> get ('auth.mongo.collection'))) ); return $ auth_manager;); 

Zuletzt müssen wir auch das aktualisieren auth.php Konfigurationsdatei, um den Mongo-Treiber zu verwenden und ihm die richtigen Mongo-Konfigurationswerte zur Verfügung zu stellen:

'driver' => 'mongo',… / ** * Mongo DB-Einstellungen * / 'mongo' => array ('host' => '127.0.0.1'), 'username' => ", 'password' =>" , 'database' => 'laravel', 'collection' => 'laravel_auth_collection')

Das Testen ist etwas schwieriger. Verwenden Sie dazu die Mongo DB CLI, um einen neuen Benutzer in die Auflistung einzufügen:

mongo> use laravel_auth zu db wechseln laravel_auth> db.laravel_auth_collection.insert (id: 1, E-Mail: "[email protected]", Kennwort: "test_password")> db.laravel_auth_collection.find ()> "_id" : ObjectId ("530c609f2caac8c3a8e4814f"), "id" 1, "email": "[email protected]", "password": "test_password"

Testen Sie es jetzt, indem Sie ein Auth :: validate Methodenaufruf:

var_dump (Auth :: validate (array ('email' => '[email protected]', 'password' => 'test_password')));

Das sollte ein Speicherabzug sein bool (wahr). Wenn dies der Fall ist, haben wir erfolgreich einen eigenen Auth-Treiber erstellt!

Die Cache-Komponente

Die Laravel Cache-Komponente verarbeitet Zwischenspeicherungsmechanismen zur Verwendung im Framework. Wie bei beiden Komponenten, die wir besprochen haben, wird auch der Laravel Manager verwendet (bemerken Sie ein Muster?). Die Cache-Komponente enthält Treiber für:

  • apc
  • Memcached
  • Redis
  • Datei - ein dateibasierter Cache. Daten werden im gespeichert App / Speicher / Cache Pfad.
  • Datenbank - datenbankbasierter Cache. Daten werden in Zeilen in der Datenbank gespeichert. Das Datenbankschema ist in der Laravel-Dokumentation beschrieben.
  • Array - Daten werden in einem Array zwischengespeichert. Denken Sie daran, dass die Array Der Cache ist nicht persistent und wird bei jedem Laden der Seite gelöscht.

Da dies der gleichen Implementierung für beide Komponenten entspricht, können wir davon ausgehen, dass der Dienstanbieter ziemlich ähnlich ist:

/ ** * Dienstanbieter registrieren. * * @return void * / public function register () $ this-> app-> bindShared ('cache', function ($ app) return new CacheManager ($ app);); $ this-> app-> bindShared ('cache.store', Funktion ($ app) return $ app ['cache'] -> driver ();); $ this-> app-> bindShared ('memcached.connector', function () return new MemcachedConnector;); $ this-> registerCommands (); 

Das registrieren() Methode hier erstellt ein CacheManager, das fungiert wieder als Wrapper und Fabrik für die Treiber. Im Manager wickelt es den Fahrer um eine Repository Klasse, ähnlich der Geschäft und Bewachen Klassen.

Erstellen eines eigenen Cache-Handlers

Erstellen Sie die MongoStore, was sollte das verlängern Illuminate \ Cache \ StoreInterface:

config = $ config; $ connection_string = 'mongodb: //'; if (! empty ($ this-> config ['username']) &&! empty ($ this-> config ['password'])) $ connection_string. = "$ this-> config ['user'] : $ this-> config ['password'] @ ";  $ connection_string. = "$ this-> config ['host']"; $ this-> connection = new Mongo ($ connection_string); $ this-> collection = $ this-> connection-> selectCollection ($ this-> config ['Datenbank'], $ this-> config ['collection']);  / ** * Rufen Sie ein Element mit dem Schlüssel aus dem Cache ab. * * @param string $ key * @return mixed * / public function get ($ key) $ cache_data = $ this-> getObject ($ key); if (! $ cache_data) return null;  Rückgabe unserialize ($ cache_data ['cache_data']);  / ** * Rückgabe des gesamten Objekts anstelle von cache_data * * @param string $ key * @return array | null * / protected function getObject ($ key) $ cache_data = $ this-> collection-> findOne (array ('key' => $ key,)); if (is_null ($ cache_data)) null zurückgeben;  if (isset ($ cache_data ['expire']) && time ()> = $ cache_data ['expire']) $ this-> forget ($ key); null zurückgeben;  Rückgabe von $ cache_data;  / ** * Ein Element für eine bestimmte Anzahl von Minuten im Cache speichern. * * @param string $ key * @param gemischt $ value * @param int $ minutes * @return void * / public Funktion ($ key, $ value, $ minutes) $ expiry = $ this-> Ablauf ($ minutes) ); $ this-> collection-> update (array ('key' => $ key), array ('$ set' => array ('cache_data' => serialize ($ value), 'expiry' => $ expiry, ' ttl '=> ($ minutes * 60))), array (' upsert '=> true,' multiple '=> false));  / ** * Erhöhen Sie den Wert eines Elements im Cache. * * @param String $ key * @param gemischt $ value * @return void * * @hrows \ LogicException * / public Funktionsinkrement ($ key, $ value = 1) $ cache_data = $ this-> getObject ($ key) ; if (! $ cache_data) $ new_data = array ('cache_data' => serialize ($ value), 'expiry' => $ this-> expiration (0), 'ttl' => $ this-> expiration (0) );  else $ new_data = array ('cache_data' => serialize (unserialize ($ cache_data ['cache_data']) + $ value), 'expiry' => $ this-> expiration ((int) ($ cache_data ['ttl.) '] / 60)),' ttl '=> $ cache_data [' ttl ']);  $ this-> collection-> update (array ('key' => $ key), array ('$ set' => $ new_data), array ('upsert' => true, 'multiple' => false)) ;  / ** * Verringert den Wert eines Elements im Cache. * * @param String $ key * @param gemischt $ value * @return void * * @hrows \ LogicException * / public Funktion dekrementieren ($ key, $ value = 1) $ cache_data = $ this-> getObject ($ key) ; if (! $ cache_data) $ new_data = array ('cache_data' => serialize ((0 - $ value)), 'expiry' => $ this-> expiration (0), 'ttl' => $ this-> Ablauf (0));  else $ new_data = array ('cache_data' => serialize (unserialize ($ cache_data ['cache_data']) - $ value), 'expiry' => $ this-> expiration ((int) ($ cache_data ['ttl.) '] / 60)),' ttl '=> $ cache_data [' ttl ']);  $ this-> collection-> update (array ('key' => $ key), array ('$ set' => $ new_data), array ('upsert' => true, 'multiple' => false)) ;  / ** * Ein Element unbegrenzt im Cache speichern. * * @param string $ key * @param gemischt $ value * @return void * / public function für immer ($ key, $ value) return $ this-> put ($ key, $ value, 0);  / ** * Entfernen Sie ein Element aus dem Cache. * * @param string $ key * @return void * / public function forget ($ key) $ this-> collection-> remove (array ('key' => $ key));  / ** * Entfernen Sie alle Elemente aus dem Cache. * * @return void * / public function flush () $ this-> collection-> remove ();  / ** * Liefert die Ablaufzeit basierend auf den angegebenen Minuten. * * @param int $ minutes * @return int * / Ablauf der geschützten Funktion ($ minutes) if ($ minutes === 0) return 9999999999; Rückkehrzeit () + ($ Minuten * 60);  / ** * Ruft das Präfix des Cache-Schlüssels ab. * * @return string * / public function getPrefix () return ";

Wir müssen auch den Mongo-Rückruf dem Manager erneut hinzufügen:

/ ** * Dienstanbieter registrieren. * * @return void * / public function register () $ this-> app-> bindShared ('cache', Funktion ($ app) $ cache_manager = neuer CacheManager ($ app); $ cache_manager-> extend ('mongo.) ', function ($ app) neuen MongoStore zurückgeben (array (' host '=> $ app [' config '] -> get (' cache.mongo.host '),' username '=> $ app [' config ' ] -> get ('cache.mongo.username'), 'password' => $ app ['config'] -> get ('cache.mongo.password'), 'database' => $ app ['config' ] -> get ('cache.mongo.database'), 'collection' => $ app ['config'] -> get ('cache.mongo.collection')));); Rückgabe von $ cache_manager;) ; $ this-> app-> bindShared ('cache.store', Funktion ($ app) return $ app ['cache'] -> driver ();); $ this-> app-> bindShared ('memcached.connector', function () return new MemcachedConnector;); $ this-> registerCommands (); 

Zuletzt müssen wir das aktualisieren cache.php Konfigurationsdatei:

'driver' => 'mongo',… / ** * Mongo DB-Einstellungen * / 'mongo' => array ('host' => '127.0.0.1'), 'username' => ", 'password' =>" , 'database' => 'laravel', 'collection' => 'laravel_cache_collection')

Versuchen Sie jetzt, die Cache :: put () und Cache :: get () Methoden. Bei korrekter Ausführung sollten wir MongoDB zum Zwischenspeichern der Daten verwenden können!

Fazit

In diesem Lernprogramm haben wir Folgendes gelernt:

  • Laravel's komponentenbasiertes System aufgerufen Erleuchten, die vom Laravel-Framework verwendet wird.
  • Laravel Service Providers und ein bisschen darüber, wie sie funktionieren.
  • Das Manager-System von Laravel, das sowohl als Wrapper als auch als Fabrik für die Treiber fungiert.
  • Session-, Auth- und Cache-Komponenten und Erstellen neuer Treiber für jede Komponente.
  • Store-, Guard- und Repository-Bibliotheken, die diese Treiber verwenden.

Hoffentlich hilft dies Programmierern dabei, ihre eigenen Treiber zu erstellen und die aktuellen Funktionen des Laravel-Frameworks zu erweitern.