Heim Backend-Entwicklung PHP-Tutorial Teilen Sie Beispiele für die Implementierung benutzerdynamischer Modulentwicklung durch Laravel

Teilen Sie Beispiele für die Implementierung benutzerdynamischer Modulentwicklung durch Laravel

Sep 23, 2017 am 09:33 AM
laravel 动态 模块

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 Lassen Sie uns mit dem untenstehenden Herausgeber lernen.

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 Benutzerdynamiken 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    事件产生时间
Nach dem Login kopieren

Die Hauptteil ist die Morph-Relation in Laravel, polymorphe Relation.

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
...
Nach dem Login kopieren

Sie werden feststellen, dass grundsätzlich jede Dynamik anders geschrieben ist, daher müssen wir auch einen „Ereignistyp“ erfassen, wie zum Beispiel „Folgen“, „Veröffentlichen“, „Antworten“, „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
Nach dem Login kopieren

Code-Implementierung

Wir haben zuvor das Design der Datenspeicherung und -anzeige besprochen und dann, wie es implementiert wird Wenn Sie sorgfältiger sind, können Sie es nativ implementieren. Schreiben Sie einfach Code, um es zu implementieren:

Die Installation war sehr einfach, richtig:


$ composer install spatie/laravel-activitylog -vvv
Nach dem Login kopieren

Updates aufzeichnen


activity()->log('Look, I logged something');
Nach dem Login kopieren

Natürlich ist diese Art von Aufzeichnung bedeutungslos und enthält fast keine nützlichen Informationen, daher sollte unsere übliche Verwendung wie folgt aussehen:


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'
Nach dem Login kopieren

Methodeneinführung:

  • performedOn($model) Legen Sie den Betreff des Ereignisses fest, bei dem es sich um die Eloquent Model-Instanz handelt.

  • causedBy($user) Festlegen der Ereignisauslöser, Benutzerinstanz

  • withProperties($properties) Die Ereignisattribute in unserem Konzept oben

  • withProperty($key, $value) Eine einzelne Verwendung von Ereignisattributen

  • log($description) Ereignisbeschreibung

Zum Beispiel möchten wir einen Artikel aufzeichnen, in dem der Benutzer eine Diskussion gepostet hat:


$discussion = App\Discussion::create([...]);

activity()->on($discussion)
->withProperty('event', 'discussion.created')
->log('发表了话题');
Nach dem Login kopieren

oder wenn der Benutzer sich registriert hat, möchte ich ein Update aufzeichnen:


activity()->on($user)
->withProperty('event', 'user.created')
->log('加入 EasyWeChat');
Nach dem Login kopieren

Sie werden feststellen, dass ich das nicht getan habe Legen Sie den Auslöser fest, da dieses Modul standardmäßig auf den aktuell angemeldeten Benutzer zurückgreift, wenn Sie den Auslöser nicht festlegen.

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);
Nach dem Login kopieren

Dann durchqueren Sie einfach die Anzeige.

Einige Erfahrung und Fähigkeiten

Richten Sie eine spezielle dynamische Beobachterklasse ein, um Dynamiken aufzuzeichnen


$ ./artisan make:listener UserActivitySubscriber
Nach dem Login kopieren

Der Code lautet wie folgt:


<?php 

namespace App\Listeners;

class UserActivitySubscriber
{
 protected $lisen = [
  &#39;eloquent.created: App\User&#39; => &#39;onUserCreated&#39;,
  &#39;eloquent.created: App\Discussion&#39; => &#39;onDiscussionCreated&#39;,
 ];

 public function subscribe($events)
 {
  foreach ($this->lisen as $event => $listener) {
   $events->lisen($event, __CLASS__.&#39;@&#39;.$listener);
  }
 }

 public function onUserCreated($user)
 {
  activity()->on($user)
   ->withProperty(&#39;event&#39;, &#39;user.created&#39;)
   ->log(&#39;加入 EasyWeChat&#39;);
 }

 public function onDiscussionCreated($discussion)
 {
  activity()->on($discussion)
    ->withProperty(&#39;event&#39;, &#39;discussion.created&#39;)->log(&#39;发表了话题&#39;);
 }
}
Nach dem Login kopieren

Dann registrieren wir diese Abonnementklasse:

Registrieren Sie dies in $subscribe in AppProvidersEventServiceProvider Abonnementkategorie:


/**
 * @var array
 */
protected $subscribe = [
 \App\Listeners\UserActivitySubscriber::class,
];
Nach dem Login kopieren

上面我们利用了 Eloquent 模型事件来监听模型的变化,当各种模型事件创建的时候我们调用对应的方法来记录动态,所以实现起来非常的方便。

在事件属性里记录关键信息

看到上面记录动态的时候你可能会问,只存储了 ID,这种多态关联,查询的时候会压力很大,比如,我们要将动态显示为:

安小超 发布了文章 《自定义菜单的使用》

我们如果只是存储了文章的 id 与类型,我们还需要查询一次文章表,才能得到标题用于显示,这样一个动态列表的话,可能会几十条 SQL 了,的确是这样的,我的解决方案是这样的:

其实我们的用户动态是不要求 100% 精准的,所以,我如果在记录时把文章的标题一起存下来是不是就不用再查表了?其实就是,我们在动态列表需要展示的关键信息,比如标题这些一起用 withProperties 存起来,这样就一条 SQL 解决了动态列表问题。

这样的做法也有弊端,比如文章改了标题的时候,这里就不同步了,当然你也可以在文章修改时来改这个属性,不过我个人认为没有多大必要。毕竟动态就是记录了当时的情况,后来改标题了并没有什么问题。

OK,用户动态模块的开发就分享到这里,如果你有更高级的实现欢迎随时交流。

关于好友动态部分的实现,根据你的应用量级,以及好友关系的存储各有不同,大家自己集思广益即可,大部分都是先查好友关系再查动态,关联查询也可以,自己实现吧。

总结

Das obige ist der detaillierte Inhalt vonTeilen Sie Beispiele für die Implementierung benutzerdynamischer Modulentwicklung durch Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP vs. Flutter: Die beste Wahl für die mobile Entwicklung PHP vs. Flutter: Die beste Wahl für die mobile Entwicklung May 06, 2024 pm 10:45 PM

PHP und Flutter sind beliebte Technologien für die mobile Entwicklung. Flutter zeichnet sich durch plattformübergreifende Funktionen, Leistung und Benutzeroberfläche aus und eignet sich für Anwendungen, die eine hohe Leistung, plattformübergreifende und benutzerdefinierte Benutzeroberfläche erfordern. PHP eignet sich für serverseitige Anwendungen mit geringerer Leistung und nicht plattformübergreifend.

Wie verwende ich objektrelationales Mapping (ORM) in PHP, um Datenbankoperationen zu vereinfachen? Wie verwende ich objektrelationales Mapping (ORM) in PHP, um Datenbankoperationen zu vereinfachen? May 07, 2024 am 08:39 AM

Datenbankoperationen in PHP werden durch ORM vereinfacht, das Objekte in relationalen Datenbanken abbildet. EloquentORM in Laravel ermöglicht Ihnen die Interaktion mit der Datenbank mithilfe einer objektorientierten Syntax. Sie können ORM verwenden, indem Sie Modellklassen definieren, Eloquent-Methoden verwenden oder in der Praxis ein Blog-System erstellen.

Analyse der Vor- und Nachteile von PHP-Unit-Test-Tools Analyse der Vor- und Nachteile von PHP-Unit-Test-Tools May 06, 2024 pm 10:51 PM

Analyse des PHP-Unit-Test-Tools: PHPUnit: Geeignet für große Projekte, bietet umfassende Funktionalität und ist einfach zu installieren, kann jedoch ausführlich und langsam sein. PHPUnitWrapper: geeignet für kleine Projekte, einfach zu verwenden, optimiert für Lumen/Laravel, verfügt jedoch über eingeschränkte Funktionalität, bietet keine Code-Coverage-Analyse und hat begrenzte Community-Unterstützung.

Vergleich der neuesten Versionen von Laravel und CodeIgniter Vergleich der neuesten Versionen von Laravel und CodeIgniter Jun 05, 2024 pm 05:29 PM

Die neuesten Versionen von Laravel 9 und CodeIgniter 4 bieten aktualisierte Funktionen und Verbesserungen. Laravel9 übernimmt die MVC-Architektur und bietet Funktionen wie Datenbankmigration, Authentifizierung und Template-Engine. CodeIgniter4 nutzt die HMVC-Architektur, um Routing, ORM und Caching bereitzustellen. In Bezug auf die Leistung sorgen das auf Dienstanbietern basierende Designmuster von Laravel9 und das leichte Framework von CodeIgniter4 für eine hervorragende Leistung. In praktischen Anwendungen eignet sich Laravel9 für komplexe Projekte, die Flexibilität und leistungsstarke Funktionen erfordern, während CodeIgniter4 für schnelle Entwicklung und kleine Anwendungen geeignet ist.

Laravel – Handwerkerbefehle Laravel – Handwerkerbefehle Aug 27, 2024 am 10:51 AM

Laravel – Artisan Commands – Laravel 5.7 bietet eine neue Möglichkeit, neue Befehle zu behandeln und zu testen. Es enthält eine neue Funktion zum Testen von Handwerkerbefehlen und die Demonstration wird unten erwähnt?

Wie vergleichen sich die Datenverarbeitungsfunktionen in Laravel und CodeIgniter? Wie vergleichen sich die Datenverarbeitungsfunktionen in Laravel und CodeIgniter? Jun 01, 2024 pm 01:34 PM

Vergleichen Sie die Datenverarbeitungsfunktionen von Laravel und CodeIgniter: ORM: Laravel verwendet EloquentORM, das eine relationale Klassen-Objekt-Zuordnung bereitstellt, während CodeIgniter ActiveRecord verwendet, um das Datenbankmodell als Unterklasse von PHP-Klassen darzustellen. Abfrage-Builder: Laravel verfügt über eine flexible verkettete Abfrage-API, während der Abfrage-Builder von CodeIgniter einfacher und Array-basiert ist. Datenvalidierung: Laravel bietet eine Validator-Klasse, die benutzerdefinierte Validierungsregeln unterstützt, während CodeIgniter über weniger integrierte Validierungsfunktionen verfügt und eine manuelle Codierung benutzerdefinierter Regeln erfordert. Praxisfall: Beispiel einer Benutzerregistrierung zeigt Lar

Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Jun 04, 2024 am 09:09 AM

Bei der Auswahl eines Frameworks für große Projekte haben Laravel und CodeIgniter jeweils ihre eigenen Vorteile. Laravel ist für Anwendungen auf Unternehmensebene konzipiert und bietet modularen Aufbau, Abhängigkeitsinjektion und einen leistungsstarken Funktionsumfang. CodeIgniter ist ein leichtes Framework, das sich eher für kleine bis mittelgroße Projekte eignet und Wert auf Geschwindigkeit und Benutzerfreundlichkeit legt. Für große Projekte mit komplexen Anforderungen und einer großen Anzahl von Benutzern sind die Leistung und Skalierbarkeit von Laravel besser geeignet. Für einfache Projekte oder Situationen mit begrenzten Ressourcen sind die leichten und schnellen Entwicklungsfunktionen von CodeIgniter idealer.

Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Jun 05, 2024 pm 07:50 PM

Für Anfänger bietet CodeIgniter eine sanftere Lernkurve und weniger Funktionen, deckt aber die Grundbedürfnisse ab. Laravel bietet einen größeren Funktionsumfang, weist jedoch eine etwas steilere Lernkurve auf. In Bezug auf die Leistung schneiden sowohl Laravel als auch CodeIgniter gut ab. Laravel verfügt über eine umfangreichere Dokumentation und aktive Community-Unterstützung, während CodeIgniter einfacher und leichtgewichtiger ist und über starke Sicherheitsfunktionen verfügt. Im praktischen Fall der Erstellung einer Blogging-Anwendung vereinfacht EloquentORM von Laravel die Datenmanipulation, während CodeIgniter mehr manuelle Konfiguration erfordert.

See all articles