


Erweiterung Oktobercms - Erstellen eines Plugins mit weichem Delete
Feb 10, 2025 am 10:21 AM
OktoberCMS: Eingehende Exploration der Plug-in-Erweiterbarkeit und praktische Softwareentfernung von Plug-in
Entwickler bevorzugen im Allgemeinen leicht zu bedienende und skalierbare CMs. Octioncms h?lt sich zun?chst an das Konzept der Einfachheit und bringt Entwicklern und Benutzern eine angenehme Erfahrung ein. Dieser Artikel zeigt einige der erweiterbaren Merkmale von Oktobercms und erweitert die Funktionalit?t eines anderen Plug-Ins mit einem einfachen Plug-In.
Schlüsselpunkte
- OctoberCMS bietet ein einfaches und benutzerfreundliches CMS und erm?glicht gleichzeitig Extensionen durch Plug-Ins. Diese Skalierbarkeit spiegelt sich in dem Ausma? wider, in dem Entwickler die internen Mechanismen von CMS durchdringen k?nnen, einschlie?lich der ?nderung der Funktionen anderer Entwickler-Plug-Ins.
- Mit dem Rainlab -Blog -Plugin k?nnen Sie Artikel erstellen und verschiedenen Kategorien zuweisen. In diesem Tutorial wird gezeigt, wie dieses Plugin erweitert wird, weiche L?schfunktionen hinzufügen und verhindern, dass Artikel dauerhaft gel?scht werden, sie aber stattdessen als "gel?scht" markieren und Zeitstempel aufnehmen.
- Um eine Soft Delete-Funktion zu erstellen, müssen Sie ein neues Plug-In erstellen und der Datenbank ein
deleted_at
Feld hinzufügen. In diesem Feld wird der Zeitstempel für den Artikel gel?scht. Das Plugin erweitert dann die Artikelliste um dieses neue Feld als Spalte und fügt einen Filter hinzu, um gel?schte Artikel anzuzeigen oder auszublenden. - Der letzte Schritt beim Erstellen einer Soft -L?schen -Funktion besteht darin, den L?schvorgang des Artikels abzufangen und die Spalte
deleted_at
zu aktualisieren. Dies geschieht durch Anbringen an das durch eloquent ausgel?stedeleting
-Ergniszung, wodurch die L?schung von Datens?tzen verhindert wird. Stattdessen wird das Felddeleted_at
auf den aktuellen Zeitstempel aktualisiert und der Datensatz wird gespeichert.
Einführung
Jedes CMS verfügt über ein Plug-in-System, um die Funktionalit?t der Plattform zu erweitern, und wir messen seine Skalierbarkeit durch das Ausma?, in dem wir die internen Mechanismen des CMS durchdringen k?nnen. Wir sprechen jedoch nicht nur über das CMS selbst, sondern auch über die Plug-Ins!
Wenn Sie ein Plugin erstellen, müssen Sie sicherstellen, dass andere Entwickler einige Ihrer Funktionen ?ndern k?nnen. Zum Beispiel haben wir ein Blog -Plugin, in dem Benutzer Artikel ver?ffentlichen k?nnen, indem sie Artikel in der Liste ausw?hlen. Es ist am besten, ein Ereignis auszul?sen, um anzuzeigen, dass ein neuer Artikel ver?ffentlicht wurde. Ein anderer Entwickler kann dieses Ereignis anbringen und Abonnenten per E -Mail benachrichtigen!
class Posts extends Controller { public function index_onPublish() { if (($checkedIds = post('checked')) && is_array($checkedIds) && count($checkedIds)) { foreach ($checkedIds as $postId) { if ((!$post = Post::find($postId)) || !$post->canEdit($this->user)) continue; $post->publish(); Event::fire('rainlab.blog.posts.published', [$post]); } Flash::success('Successfully published those posts.'); } return $this->listRefresh(); } }
Andere Entwickler k?nnen diese Veranstaltung anh?ren, um ver?ffentlichte Artikel zu verarbeiten.
Event::listen('rainlab.blog.posts.published', function($post) { User::subscribedTo($post)->each(function($user) use($post) { Mail::send('emails.notifications.post-published', ['user' => $user, 'post' => $post], function($message) use($user, $post) { $message->from('us@example.com', 'New post by ' . $user->name); $message->to($user->email); }); }); });
Wir werden haupts?chlich Ereignisse verwenden, um an verschiedene Teile des Anforderungszyklus zu h?ngen. Beginnen wir mit einem konkreten Beispiel, um besser zu verstehen.
Rainlab Blog Plugin
Wenn Sie Oktobercms für eine Weile verwendet haben, müssen Sie das Rainlab -Blog -Plugin kennen. Sie k?nnen Artikel im Backend hinzufügen und an Kategorien anh?ngen. Sie k?nnen mit Komponenten in der Frontend angezeigt werden.
Auf der Artikelliste k?nnen wir den Artikel l?schen. Aber was ist, wenn wir sie sanft l?schen wollen? Mal sehen, ob wir dies tun und mehr über die Skalierbarkeit von Oktobercms erfahren k?nnen.
Erstellen Sie ein neues Plug-In
Erstellen Sie ein neues Plugin für unsere Demo mit dem Befehl scastolding -Assistent und aktualisieren Sie die Plugin -Details in der Datei plugin.php.
class Posts extends Controller { public function index_onPublish() { if (($checkedIds = post('checked')) && is_array($checkedIds) && count($checkedIds)) { foreach ($checkedIds as $postId) { if ((!$post = Post::find($postId)) || !$post->canEdit($this->user)) continue; $post->publish(); Event::fire('rainlab.blog.posts.published', [$post]); } Flash::success('Successfully published those posts.'); } return $this->listRefresh(); } }
erweiterten Datenbankmodus
Wenn Sie über eine weiche L?schung sprechen, ist das erste, was mir in den Sinn kommt, die Feldspalte deleted_at
, die in der Datenbank vorhanden sein muss.
Erstellen Sie eine neue Datei mit dem Namen blogplus/updates
unter dem Ordner create_posts_deleted_at_field.php
und aktualisieren Sie die version.yaml
-Datei.
Event::listen('rainlab.blog.posts.published', function($post) { User::subscribedTo($post)->each(function($user) use($post) { Mail::send('emails.notifications.post-published', ['user' => $user, 'post' => $post], function($message) use($user, $post) { $message->from('us@example.com', 'New post by ' . $user->name); $message->to($user->email); }); }); });
php artisan create:plugin rafie.blogplus
Migrieren Sie die Klasse ?ndert die Tabelle rainlab_blog_posts
und fügt unsere Spalte deleted_at
hinzu, die standardm??ig null ist. Vergessen Sie nicht, den Befehl php artisan plugin:refresh rafie.blogplus
zu führen, um die ?nderungen in Kraft zu setzen.
erweiterte Artikelliste
Als n?chstes müssen wir unsere Felder als Spalten zur Anzeige zur Liste hinzufügen. OctoberCMS bietet uns ein Ereignis, um das derzeit angezeigte Widget zu montieren und zu ?ndern (die Backend -Liste wird als Widget angesehen).
# updates/version.yaml 1.0.1: - First version of blogplus. - create_posts_deleted_at_field.php
Hinweis: Der obige Code sollte in der Methode Plugin@boot
platziert werden.
Wir haben eine IF -Anweisung, um zu verhindern, dass unser Code auf jeder Seite ausgeführt wird, und dann dem Listen -Widget eine neue Spalte hinzufügen, und wir k?nnen auch die Methode removeColumn
verwenden, um vorhandene Spalten zu l?schen. überprüfen Sie die Dokumentation für eine Liste der verfügbaren Spaltenoptionen.
erweitertes Filter
Die Spalte oben in der Artikelliste erm?glicht es Benutzern, Listen mit Daten, Kategorien usw. zu filtern, usw. In unserem Fall brauchen wir einen Filter, um gel?schte Artikel anzuzeigen/auszublenden.
# updates/create_posts_deleted_at_field.php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreatePostsDeletedAtField extends Migration { public function up() { Schema::table('rainlab_blog_posts', function (Blueprint $table) { $table->timestamp('deleted_at')->nullable()->default(null); }); } public function down() { Schema::table('rainlab_blog_posts', function (Blueprint $table) { $table->dropColumn('deleted_at'); }); } }
Sie k?nnen mehr über Listenfilter in der Dokumentation lesen. Der obige Code ist recht einfach und enth?lt nur wenige Optionen. Das scope
-attribut sollte jedoch der Name der in der Models\Post
-Modellinstanz definierten Abfragemethode sein.
Extensible Class
OktoberRaineSextextendabletrait -Merkmal liefert eine magische Methode, um vorhandene Klassen dynamisch zu erweitern, indem neue Methoden, Attribute, Verhaltensweisen usw. hinzugefügt werden. In unserem Beispiel müssen wir dem Artikelmodell eine neue Methode hinzufügen, um unseren Bereichsfilter zu verarbeiten.
// plugin.php 在Plugin類的boot方法中 Event::listen('backend.list.extendColumns', function ($widget) { if (!($widget->getController() instanceof \Rainlab\Blog\Controllers\Posts)) { return; } $widget->addColumns([ 'deleted_at' => [ 'label' => 'Deleted', 'type' => 'date', ], ]); });wir k?nnen dasselbe für
, addDynamicProperty
usw. tun. Lassen Sie uns unsere Artikelliste aktualisieren, um festzustellen, ob unsere ?nderungen funktionieren. asExtension
aktualisieren. deleted_at
Tipp: Anstatt die Eigenschaft scope
zu verwenden, k?nnen Sie die Bedingungen verwenden, um einen einfachen Zustand anzugeben. Der folgende Code funktioniert genauso wie die Verwendung des Modellbereichs.
class Posts extends Controller { public function index_onPublish() { if (($checkedIds = post('checked')) && is_array($checkedIds) && count($checkedIds)) { foreach ($checkedIds as $postId) { if ((!$post = Post::find($postId)) || !$post->canEdit($this->user)) continue; $post->publish(); Event::fire('rainlab.blog.posts.published', [$post]); } Flash::success('Successfully published those posts.'); } return $this->listRefresh(); } }
eloquentes Ereignis
eloquent l?st eine Reihe von Ereignissen bei jedem Vorgang aus (erstellen, aktualisieren, l?schen usw.). In diesem Fall müssen wir uns an das L?schenereignis anschlie?en und die L?schung des Datensatzes verhindern.
Beim L?schen eines Datensatzes wird das -Erdition ausgel?st, bevor der tats?chliche L?schvorgang durchgeführt wird, und das Ereignis deleting
wird danach ausgel?st. Wenn Sie im Ereignis deleted
false zurückgeben, wird die Operation abbrechen. deleting
Event::listen('rainlab.blog.posts.published', function($post) { User::subscribedTo($post)->each(function($user) use($post) { Mail::send('emails.notifications.post-published', ['user' => $user, 'post' => $post], function($message) use($user, $post) { $message->from('us@example.com', 'New post by ' . $user->name); $message->to($user->email); }); }); });Jetzt sind wir bereit, das Endergebnis zu testen! L?schen Sie weiterhin einige Datens?tze und gehen Sie dann zur Artikellistenseite, um festzustellen, ob Sie gel?schte Elemente in der Liste wechseln k?nnen.
Schlussfolgerung
Dieser Artikel bietet einen kurzen überblick darüber, wie die verschiedenen Teile der OctionCMS -Plattform erweitert werden k?nnen. Sie k?nnen mehr darüber im Abschnitt Extension Plugin der Dokumentation erfahren. Wenn Sie Fragen oder Kommentare haben, hinterlassen Sie bitte eine Nachricht unten!
FAQs über die Erweiterung von Oktobercms und das Erstellen von Soft -L?schen -Plugins
Was ist der Zweck des Softwareentfernungs-Plug-Ins in Oktobercms?
Das Soft-L?schen-Plug-In im Oktober ist so konzipiert, dass ein dauerhafter Datenverlust verhindern wird. Wenn Sie einen Datensatz l?schen, wird er nicht vollst?ndig aus der Datenbank gel?scht. Stattdessen wird ein
Zeitstempel für den Datensatz eingestellt. Dies bedeutet, dass der Datensatz aus Sicht der Anwendung als "gel?scht" angesehen wird, aber bei Bedarf weiterhin abgerufen werden kann. Dies ist besonders nützlich in Szenarien, in denen Daten versehentlich gel?scht werden k?nnen, da dies eine einfache Wiederherstellung erm?glicht. deleted_at
Hartes L?schen l?scht dauerhafte Datens?tze aus der Datenbank und kann nicht wiederhergestellt werden, es sei denn, Sie haben eine Sicherung. Auf der anderen Seite markiert die Soft -L?schung den Datensatz einfach als gel?scht und l?scht ihn nicht aus der Datenbank. Auf diese Weise k?nnen Sie bei Bedarf Datens?tze wiederherstellen.
So implementieren Sie Soft Delete -Funktion in Oktobercms?
Um Soft Delete-Funktion in Oktobercms zu implementieren, müssen Sie ein Plug-In erstellen. Dies beinhaltet das Erstellen eines neuen Plugins, das Hinzufügen von Spalten
in die Datenbanktabelle und die Aktualisierung Ihres Modells für die Verwendung deleted_at
Merkmal. Sie k?nnen dann die Methode SoftDeletes
auf dem Modell verwenden, um den Datensatz sanft zu l?schen und die delete
-Methode zu verwenden, um ihn wiederherzustellen. restore
Sie k?nnen die Funktion Soft Delete testen, indem Sie Unit -Tests erstellen. Dies beinhaltet das Erstellen eines neuen Testfalls, das Erstellen eines neuen Datensatzes in der Datenbank, das L?schen von sanftem L?schen und die Behauptung, dass sie in der Datenbank noch vorhanden ist, aber als gel?scht markiert wird.
Kann ich die Funktion Soft Delete mit vorhandenen Datens?tzen verwenden?
Ja, Sie k?nnen die Funktion Soft Delete mit vorhandenen Datens?tzen verwenden. Sie müssen nur die Spalte
zur vorhandenen Datenbanktabelle hinzufügen. Diese Spalte für alle vorhandenen Datens?tze hat einen deleted_at
-Wergue, der angibt, dass sie nicht gel?scht wurden. null
Wie kann ich in Oktobercms sanft gel?schte Datens?tze wiederherstellen?
Um soft gel?schte Datens?tze wiederherzustellen, k?nnen Sie die restore
-Methode auf dem Modell verwenden. Dadurch wird der Zeitstempel deleted_at
aus dem Datensatz entfernt, effektiv "undelete".
Kann ich im Oktober -CCMS dauerhaft weiche gel?schte Datens?tze l?schen?
Ja, Sie k?nnen mithilfe der forceDelete
-Methode auf dem Modell sanft gel?schte Datens?tze dauerhaft l?schen. Dadurch werden Datens?tze aus der Datenbank wie eine harte L?schung gel?scht.
Wie kann man alle Datens?tze anzeigen, einschlie?lich sanft gel?schter Datens?tze in Oktobercms?
Um alle Datens?tze anzuzeigen, einschlie?lich sanft gel?schter Datens?tze, k?nnen Sie die Methode withTrashed
für das Modell verwenden. Dadurch werden alle Datens?tze zurückgegeben, unabh?ngig davon, ob sie weich gel?scht wurden oder nicht.
Kann ich den Namen der Spalte deleted_at
in Oktobercms anpassen?
Ja, Sie k?nnen den Namen der Spalte getDeletedAtColumn
anpassen, indem Sie die Methode deleted_at
im Modell überschreiben. Wenn deleted_at
nicht für Ihre Anforderungen geeignet ist, k?nnen Sie verschiedene Spaltennamen verwenden.
Kann ich die Funktion der Soft -L?schen für bestimmte Datens?tze in Oktobercms deaktivieren?
Ja, Sie k?nnen Soft Delete für einige Datens?tze unter Verwendung der withoutGlobalScope
-Methode auf dem Modell deaktivieren. Auf diese Weise k?nnen Sie bestimmte Datens?tze von der Funktion "Soft Delete" ausschlie?en.
Das obige ist der detaillierte Inhalt vonErweiterung Oktobercms - Erstellen eines Plugins mit weichem Delete. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

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

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

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen





Um die St?rke des Kennworts zu bestimmen, muss die regelm??ige und logische Verarbeitung kombiniert werden. Die grundlegenden Anforderungen umfassen: 1. Die L?nge betr?gt mindestens 8 Ziffern; 2. Enthaltende Kleinbuchstaben, Gro?buchstaben und Zahlen; 3.. Spezielle Charakterbeschr?nkungen k?nnen hinzugefügt werden; In Bezug auf fortgeschrittene Aspekte müssen eine kontinuierliche Vervielf?ltigung von Zeichen und inkrementelle/abnehmende Sequenzen vermieden werden, was eine PHP -Funktionserkennung erfordert. Gleichzeitig sollten Blacklists vorgestellt werden, um gemeinsame schwache Passw?rter wie Passwort und 123456 zu filtern. Schlie?lich wird empfohlen, die ZXCVBN -Bibliothek zu kombinieren, um die Bewertungsgenauigkeit zu verbessern.

H?ufige Probleme und L?sungen für den variablen PHP -Umfang umfassen: 1. Die globale Variable kann innerhalb der Funktion nicht zugegriffen werden, und sie muss bei der Verwendung des globalen Schlüsselworts oder Parameters übergeben werden. 2. Die statische Variable wird statisch deklariert und nur einmal initialisiert und der Wert wird zwischen mehreren Aufrufen beibehalten. 3.. Hyperglobale Variablen wie $ _get und $ _post k?nnen direkt in jedem Bereich verwendet werden, aber Sie müssen auf eine sichere Filterung achten. 4. Die anonymen Funktionen müssen über das Schlüsselwort verwenden, und wenn Sie externe Variablen ?ndern, müssen Sie eine Referenz übergeben. Das Beherrschen dieser Regeln kann dazu beitragen, Fehler zu vermeiden und die Code -Stabilit?t zu verbessern.

Um PHP -Datei -Uploads sicher zu verarbeiten, müssen Sie die Quelle und die Type und die Eingabe des Dateinamens und des Pfades überprüfen, Serverbeschr?nkungen festlegen und Mediendateien zweimal verarbeiten. 1. überprüfen Sie die Upload -Quelle, um CSRF durch Token zu verhindern, und erkennen Sie den realen MIME -Typ über die Finfo_file mithilfe der Whitelist -Steuerung. 2. Benennen Sie die Datei in eine zuf?llige Zeichenfolge um und bestimmen Sie die Erweiterung, um sie gem?? dem Erkennungstyp in einem Verzeichnis ohne Web zu speichern. 3. Die PHP -Konfiguration begrenzt die Hochladengr??e und das tempor?re Verzeichnis Nginx/Apache verbietet den Zugriff auf das Upload -Verzeichnis. 4. Die GD -Bibliothek stellt die Bilder neu, um potenzielle b?swillige Daten zu l?schen.

Es gibt drei g?ngige Methoden für den PHP -Kommentarcode: 1. Verwenden Sie // oder #, um eine Codezeile zu blockieren, und es wird empfohlen, // zu verwenden. 2. Verwenden Sie /.../, um Codebl?cke mit mehreren Zeilen zu wickeln, die nicht verschachtelt werden k?nnen, aber gekreuzt werden k?nnen. 3.. Kombinationskenntnisse Kommentare wie die Verwendung / if () {} / Um Logikbl?cke zu steuern oder um die Effizienz mit Editor -Verknüpfungsschlüssel zu verbessern, sollten Sie auf die Schlie?ung von Symbolen achten und das Verschachteln bei der Verwendung vermeiden.

AgneeratorinphpiSamemory-effizientes WaytoiterateOverlargedatasetsByyieldingValueatimeinsteadofReturningThemallatonce.1.GeneratorsusetheyieldKeywordtoproduktenvaluesonDemand, ReducingMemoryUsage.2.TheyareusefulforfulforfulfordlingBiglopploups, Lesebiglochen, Leselungen, Lesebigs, Leselung, oder

Der Schlüssel zum Schreiben von PHP -Kommentaren liegt in der Kl?rung des Zwecks und der Spezifikationen. Kommentare sollten "Warum" und nicht "was getan" erkl?ren, um Redundanz oder zu Einfachheit zu vermeiden. 1. Verwenden Sie ein einheitliches Format wie Docblock (/*/) für Klassen- und Methodenbeschreibungen, um die Lesbarkeit und die Kompatibilit?t der Werkzeuge zu verbessern. 2. Betonen Sie die Gründe für die Logik, z. B. warum JS -Sprünge manuell ausgeben müssen. 3. Fügen Sie eine übersichtsbeschreibung vor komplexem Code hinzu, beschreiben Sie den Prozess in Schritten und helfen Sie, die Gesamtidee zu verstehen. V. Gute Anmerkungen k?nnen die Kommunikationskosten senken und die Effizienz der Code -Wartung verbessern.

Toinstallphpquickly, usexampponwindowsorhomebrewonmacos.1.onwindows, download undInstallxampp, SelectComponents, Startapache und PlaceFilesinhtdocscs.2.Anternativ, manuellinstallphpfrfr

Tolearnphpeffectival, startbysettingupalocalerverenVironmentusexs -LikexamppandacodeeditorikevScode.1) InstallxamppForapache, MySQL und Php.SeacodeeditorForsyntaxSupport.3) testyourscludingveliktingveliktelaThbiliodble.Neclyble.NektFile
