


Detaillierte Erläuterung des benutzerdynamischen Moduls für die Laravel-Entwicklung
Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zur Entwicklung benutzerdynamischer Module auf Basis von Laravel ein. Der Artikel stellt ihn anhand von Beispielcodes ausführlich vor Sie können es weiter unten verfolgen. Kommen Sie und lernen Sie mit mir. Ich hoffe, es hilft allen.
Vorwort
Ich glaube, jeder weiß, dass fast alle Community-Anwendungen einen Benutzerstatusbereich haben, den Benutzer über den Freundesstatus erhalten können. Weitere interessante Inhalte , wodurch die Community-Aktivität und die Benutzerbindung erhöht werden. Seine Implementierung ist relativ komplizierter als die gewöhnliche Veröffentlichung von Inhalten, was sich hauptsächlich in der Vielfalt der Inhalte widerspiegelt.
Um dieses Problem zu lösen, müssen wir diese verschiedenen Arten von Inhalten abstrahieren, Gemeinsamkeiten extrahieren und dieselbe Struktur verwenden, um sie zu verarbeiten, was die Entwicklung viel einfacher macht.
Konzeptionelle Abstraktion
Benutzerdynamik, wie der Name schon sagt, ist die Erzeugung von Dynamik die historische Aufzeichnung einer Reihe von Ereignissen, also zuerst Konzentrieren Sie sich auf das „Ereignis“. Substantiv, welche Attribute hat es:
Auslöser, fast alle Ereignisse, die auf der Community basieren, werden von Benutzern ausgelöst
Betreff der Veranstaltung, Veranstaltung Die Hauptinformationen, z. B. „Artikel“ in „xxx hat einen Artikel veröffentlicht“.
Ereignisattribute, unterschiedliche Ereignisthemen erfordern unterschiedliche zusätzliche Informationen, wie z. B. den Ereignistyp.
Die Ereigniszeit zeichnet den Zeitpunkt auf, zu dem das Ereignis auftritt. Natürlich zeichnet unsere Datenbank normalerweise den Zeitpunkt auf, zu dem alle Daten generiert werden.
Wir abstrahieren die Benutzerdynamik in eine Struktur mit nur 4 Grundattributen, die einfacher zu implementieren ist:
- description 事件描述 - causer_id 或者 user_id 事件触发者 - subject_id 主体 ID - subject_type 主体类型 - properties 事件附加属性 - created_at 事件产生时间
Der Hauptteil ist die Morph-Relation in Laravel. polymorphe Assoziation.
So zeigen Sie
Unsere dynamischen Anzeigeanforderungen umfassen normalerweise Folgendes:
Ich, Freunde ' Updates
Updates einer Person, normalerweise persönliches Center
-
alle Updates, z. B. alle Updates auf der Laravel China-Homepage
Dynamische Suche, relativ selten
Ich entwickle derzeit eine neue Version der EasyWeChat-Website, die auch über Benutzerdynamik verfügt, zum Beispiel:
xxx 发布了讨论 《请问大家怎么使用 xxx》 xxx 评论了 xxx 的话题 《请问大家怎么使用 xxx》 xxx 回复了 xxx 的评论 “我是按照文档上 ...” xxx 购买了 《微信开发:自定义菜单的使用》 xxx 关注了 xxx ...
Sie werden feststellen, dass im Grunde jede Dynamik anders geschrieben ist, daher müssen wir auch einen „Ereignistyp“ aufzeichnen, wie zum Beispiel „Folgen“, „Veröffentlichen“, „Antworten“ und „Kauf“.
Wenn wir dann Blade- oder andere Template-Engines verwenden, können wir ... das Fallschreiben ändern, um verschiedene Vorlagen zum Rendern dieser Stile anzuwenden. Zum Beispiel in Blade, meine Verwendung:
@switch($activity->properties['event'] ?? '') @case('discussion.created') ... @break @case('comment.created') ... @break @endswitch
Code-Implementierung
Wir haben bereits das Design der Datenspeicherung und -anzeige besprochen und dann, wie man es implementiert. Wenn Sie sorgfältiger sind, können Sie es implementieren Schließlich wurde die obige Implementierungsmethode klar beschrieben. Schreiben Sie einfach Code, um sie zu implementieren. Ich würde heute empfehlen, spatie/laravel-activitylog zu verwenden, um sie zu implementieren:
Die Installation war immer einfach , rechts:
$ composer install spatie/laravel-activitylog -vvv
Dynamik aufzeichnen
activity()->log('Look, I logged something');
Natürlich ist diese Art von Aufzeichnung bedeutungslos und enthält fast keine nützlichen Informationen, daher sollte es unsere übliche Verwendung sein so:
activity() ->performedOn($anEloquentModel) ->causedBy($user) ->withProperties(['customProperty' => 'customValue']) ->log('Look, I logged something'); $lastLoggedActivity = Activity::all()->last(); $lastLoggedActivity->subject; //returns an instance of an eloquent model $lastLoggedActivity->causer; //returns an instance of your user model $lastLoggedActivity->getExtraProperty('customProperty'); //returns 'customValue' $lastLoggedActivity->description; //returns 'Look, I logged something'
Methodeneinführung:
-
performedOn($model)
Legen Sie den Ereignisbetreff fest, bei dem es sich um die Eloquent Model-Instanz handelt causedBy($user)
Legen Sie den Ereignisauslöser fest, BenutzerinstanzwithProperties($properties)
Das Ereignisattribut in unserem Konzept oben-
withProperty($key, $value)
Verwendung eines einzelnen Ereignisattributs log($description)
Ereignisbeschreibung
Zum Beispiel möchten wir eine Diskussion aufzeichnen und Der Benutzer hat eine Diskussion gepostet:
$discussion = App\Discussion::create([...]); activity()->on($discussion) ->withProperty('event', 'discussion.created') ->log('发表了话题');
Oder wenn sich ein Benutzer registriert, möchte ich ein Update aufzeichnen:
activity()->on($user) ->withProperty('event', 'user.created') ->log('加入 EasyWeChat');
Sie werden feststellen, dass ich keinen Auslöser gesetzt habe, weil dies der Fall ist Wenn Sie keinen Auslöser festlegen, verwendet das Modul standardmäßig den aktuell angemeldeten Benutzer.
Dynamik anzeigen
Die Anzeige der Dynamik erfolgt entsprechend den Bedingungen aus der Datenbank. Hier wird die vom Paket bereitgestellte Modellklasse verwendet : SpatieActivitylogModelsActivity
use SpatieActivitylogModelsActivity;
// 全部动态 $activities = Activity::all(); // 用户 ID 为 2 的动态 $activities = Activity::causedBy(User::find(2))->paginate(15); // 以文章 ID 为 13 为主体的动态 $activities = Activity::forSubject(Post::find(13))->paginate(15);
Dann durchqueren Sie einfach die Anzeige.
Einige Erfahrungen und Fähigkeiten
Richten Sie eine spezielle dynamische Beobachterklasse ein, um Dynamiken aufzuzeichnen
$ ./artisan make:listener UserActivitySubscriber
Der Code lautet wie folgt:
<?php namespace App\Listeners; class UserActivitySubscriber { protected $lisen = [ 'eloquent.created: App\User' => 'onUserCreated', 'eloquent.created: App\Discussion' => 'onDiscussionCreated', ]; public function subscribe($events) { foreach ($this->lisen as $event => $listener) { $events->lisen($event, __CLASS__.'@'.$listener); } } public function onUserCreated($user) { activity()->on($user) ->withProperty('event', 'user.created') ->log('加入 EasyWeChat'); } public function onDiscussionCreated($discussion) { activity()->on($discussion) ->withProperty('event', 'discussion.created')->log('发表了话题'); } }
Dann registrieren wir diese Abonnementklasse:
Registrieren Sie diese Abonnementklasse in $subscribe in AppProvidersEventServiceProvider:
/** * @var array */ protected $subscribe = [ \App\Listeners\UserActivitySubscriber::class, ];
Oben haben wir das Eloquent-Modell verwendet Ereignisse werden verwendet, um Änderungen im Modell zu überwachen. Wenn verschiedene Modellereignisse erstellt werden, rufen wir die entsprechenden Methoden auf, um die Dynamik aufzuzeichnen, sodass die Implementierung sehr einfach ist.
Schlüsselinformationen in Ereignisattributen aufzeichnen
Wenn Sie die oben aufgezeichneten Dynamiken sehen, fragen Sie sich vielleicht, dass diese Art der polymorphen Zuordnung bei der Abfrage sehr stressig sein wird. Beispielsweise möchten wir die Dynamiken wie folgt anzeigen:
Ein Xiaochao hat einen Artikel „Verwenden eines benutzerdefinierten Menüs“ veröffentlicht
Wenn wir nur die ID und den Typ des Artikels speichern, müssen wir auch die Artikeltabelle einmal abfragen, um den Titel zur Anzeige zu erhalten Wenn es sich um eine Liste handelt, gibt es möglicherweise Dutzende von SQLs. Dies ist tatsächlich der Fall:
Tatsächlich erfordert unsere Benutzerdynamik keine 100% ige Genauigkeit Der Titel des Artikels macht es überflüssig, die Tabelle erneut nachzuschlagen? Tatsächlich werden die Schlüsselinformationen, die wir in der dynamischen Liste anzeigen müssen, wie z. B. der Titel, zusammen mit withProperties gespeichert, sodass ein einziges SQL das Problem der dynamischen Liste löst.
Dieser Ansatz hat auch Nachteile, wenn beispielsweise der Titel des Artikels geändert wird. Natürlich kann man dieses Attribut auch ändern, wenn der Artikel geändert wird, aber ich persönlich denke es ist nicht notwendig. Schließlich besteht die Dynamik darin, die Situation zu diesem Zeitpunkt aufzuzeichnen, und es ist kein Problem, wenn der Titel später geändert wird.
OK, die Entwicklung des benutzerdynamischen Moduls wird hier geteilt. Wenn Sie eine fortgeschrittenere Implementierung haben, können Sie uns gerne mitteilen.
Was die Implementierung des dynamischen Freundesteils betrifft, hängt es von der Größe Ihrer Anwendung und dem Speicher der Freundesbeziehungen ab. Die meisten davon können einfach zuerst die Freundesbeziehung prüfen und dann die Aktualisierungen überprüfen. Verwandte Fragen sind auch Okay, mach es selbst.
Verwandte Empfehlungen:
Detaillierte Erklärung, wie Laravel Modellabfragen durch Vorladen optimiert
Detaillierte Erklärung zum Ändern der Stammadresse von url() in Laravel
Detaillierte Erklärung, wie Laravel geplante Aufgaben implementiert
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des benutzerdynamischen Moduls für die Laravel-Entwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

PHP wird verwendet, um dynamische Websites zu erstellen. Zu den Kernfunktionen gehören: 1. Dynamische Inhalte generieren und Webseiten in Echtzeit generieren, indem Sie eine Verbindung mit der Datenbank herstellen; 2. Verarbeiten Sie Benutzerinteraktions- und Formulareinreichungen, überprüfen Sie Eingaben und reagieren Sie auf Operationen. 3. Verwalten Sie Sitzungen und Benutzerauthentifizierung, um eine personalisierte Erfahrung zu bieten. 4. Optimieren Sie die Leistung und befolgen Sie die Best Practices, um die Effizienz und Sicherheit der Website zu verbessern.

PHP verwendet MySQLI- und PDO-Erweiterungen, um in Datenbankvorgängen und serverseitiger Logikverarbeitung zu interagieren und die serverseitige Logik durch Funktionen wie Sitzungsverwaltung zu verarbeiten. 1) Verwenden Sie MySQLI oder PDO, um eine Verbindung zur Datenbank herzustellen und SQL -Abfragen auszuführen. 2) Behandeln Sie HTTP -Anforderungen und Benutzerstatus über Sitzungsverwaltung und andere Funktionen. 3) Verwenden Sie Transaktionen, um die Atomizität von Datenbankvorgängen sicherzustellen. 4) Verhindern Sie die SQL -Injektion, verwenden Sie Ausnahmebehandlung und Schließen von Verbindungen zum Debuggen. 5) Optimieren Sie die Leistung durch Indexierung und Cache, schreiben Sie hochlesbarer Code und führen Sie die Fehlerbehandlung durch.

Die Verwendung von Vorverarbeitungsanweisungen und PDO in PHP kann SQL -Injektionsangriffe effektiv verhindern. 1) Verwenden Sie PDO, um eine Verbindung zur Datenbank herzustellen und den Fehlermodus festzulegen. 2) Erstellen Sie Vorverarbeitungsanweisungen über die Vorbereitungsmethode und übergeben Sie Daten mit Platzhaltern und führen Sie Methoden aus. 3) Abfrageergebnisse verarbeiten und die Sicherheit und Leistung des Codes sicherstellen.

PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1.PHP eignet sich für eine schnelle Entwicklung und Wartung großer Webanwendungen. 2. Python dominiert das Gebiet der Datenwissenschaft und des maschinellen Lernens.

PHP wird in E-Commerce, Content Management Systems und API-Entwicklung häufig verwendet. 1) E-Commerce: Wird für die Einkaufswagenfunktion und Zahlungsabwicklung verwendet. 2) Content -Management -System: Wird für die Erzeugung der dynamischen Inhalte und die Benutzerverwaltung verwendet. 3) API -Entwicklung: Wird für die erholsame API -Entwicklung und die API -Sicherheit verwendet. Durch Leistungsoptimierung und Best Practices werden die Effizienz und Wartbarkeit von PHP -Anwendungen verbessert.

PHP erleichtert es einfach, interaktive Webinhalte zu erstellen. 1) Generieren Sie Inhalte dynamisch, indem Sie HTML einbetten und in Echtzeit basierend auf Benutzereingaben oder Datenbankdaten anzeigen. 2) Verarbeitungsformularübermittlung und dynamische Ausgabe erzeugen, um sicherzustellen, dass HTMLSpecialChars zur Vorbeugung von XSS verwendet wird. 3) Verwenden Sie MySQL, um ein Benutzerregistrierungssystem zu erstellen und Anweisungen von Password_hash und Preprocessing vorzubereiten, um die Sicherheit zu verbessern. Durch die Beherrschung dieser Techniken wird die Effizienz der Webentwicklung verbessert.

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

PHP ist immer noch dynamisch und nimmt immer noch eine wichtige Position im Bereich der modernen Programmierung ein. 1) Einfachheit und leistungsstarke Unterstützung von PHP machen es in der Webentwicklung weit verbreitet. 2) Seine Flexibilität und Stabilität machen es ausstehend bei der Behandlung von Webformularen, Datenbankoperationen und Dateiverarbeitung; 3) PHP entwickelt sich ständig weiter und optimiert, geeignet für Anfänger und erfahrene Entwickler.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Dreamweaver CS6
Visuelle Webentwicklungstools

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools