


octobrecms: exploration approfondie de l'extensibilité du plug-in et de la suppression des logiciels pratiques du plug-in
Les développeurs préfèrent généralement les CM faciles à utiliser et évolutifs. OCTORCMS adhère au concept de simplicité d'abord, apportant une expérience agréable aux développeurs et aux utilisateurs. Cet article démontre certaines des caractéristiques extensibles de l'octobre et étend la fonctionnalité d'un autre plug-in avec un plug-in simple.
points clés
- OCTOBSCMS fournit un CMS simple et facile à utiliser tout en permettant des extensions via des plug-ins. Cette évolutivité se reflète dans la mesure dans laquelle les développeurs peuvent pénétrer les mécanismes internes de la CMS, y compris la modification des fonctions des autres plug-ins de développeurs.
- Le plugin Blog RainLab vous permet de créer des articles et de les attribuer à différentes catégories. Ce tutoriel montre comment étendre ce plugin, ajouter des fonctionnalités de suppression douce, empêcher les articles d'être supprimés en permanence, mais les marquent plutôt comme "supprimés" et enregistrer des horodatages.
- Pour créer une fonction de suppression douce, vous devez créer un nouveau plug-in et ajouter un champ
deleted_at
à la base de données. Ce champ sauvera l'horodatage pour la suppression de l'article. Le plugin étend ensuite la liste des articles pour inclure ce nouveau champ en tant que colonne et ajoute un filtre pour afficher ou masquer les articles supprimés. - La dernière étape de la création d'une fonction de suppression douce consiste à intercepter l'opération de suppression de l'article et à mettre à jour la colonne
deleted_at
. Ceci se fait en s'attachant à l'événementdeleting
déclenché par éloquent, empêchant la suppression des enregistrements. Au lieu de cela, le champdeleted_at
sera mis à jour à l'horodatage actuel et l'enregistrement sera enregistré.
Introduction
Chaque CMS a un système de plug-in pour étendre les fonctionnalités de la plate-forme, et nous mesurons son évolutivité dans la mesure dans laquelle nous pouvons pénétrer les mécanismes internes du CMS. Cependant, nous parlons non seulement du CMS lui-même, mais aussi des plug-ins!
Si vous créez un plugin, vous devez vous assurer que d'autres développeurs peuvent modifier certaines de vos fonctionnalités. Par exemple, nous avons un plugin de blog où les utilisateurs peuvent publier des articles en sélectionnant des articles dans la liste. Il est préférable de déclencher un événement pour indiquer qu'un nouvel article a été publié, un autre développeur peut monter à cet événement et informer les abonnés par e-mail!
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(); } }
D'autres développeurs peuvent écouter cet événement pour gérer les articles publiés.
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); }); }); });
Nous utiliserons principalement des événements pour nous accrocher à différentes parties du cycle de demande. Commençons par un exemple concret pour mieux comprendre.
Plugin de blog Rainlab
Si vous avez utilisé Octobrecms pendant un certain temps, vous devez connaître le plugin Blog RainLab. Il vous permet d'ajouter des articles dans le backend et de les attacher aux catégories, et vous pouvez utiliser des composants pour les afficher dans le frontend.
Sur la page de la liste des articles, nous pouvons supprimer l'article. Mais que se passe-t-il si nous voulons les supprimer doucement? Voyons si nous pouvons faire cela et en savoir plus sur l'évolutivité d'octobre.
Créez un nouveau plug-in
Créez un nouveau plugin pour notre démo à l'aide de la commande Assistant d'échafaudage et mettez à jour les détails du plugin dans le fichier 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(); } }
Mode de base de données étendu
Lorsque vous parlez de délétion douce, la première chose qui vous vient à l'esprit est la colonne deleted_at
Field qui doit exister dans la base de données.
Créez un nouveau fichier nommé blogplus/updates
sous le dossier create_posts_deleted_at_field.php
et mettez à jour le fichier version.yaml
.
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
Migrer la classe modifie le tableau rainlab_blog_posts
et ajoute notre colonne deleted_at
, qui par défaut est nul. N'oubliez pas d'exécuter la commande php artisan plugin:refresh rafie.blogplus
pour que les modifications prennent effet.
Liste d'articles étendus
Ensuite, nous devons ajouter nos champs en tant que colonnes à la liste pour l'affichage. OCTOBSCMS nous fournit un événement pour monter et modifier le widget actuellement affiché (la liste backend est considérée comme un widget).
# updates/version.yaml 1.0.1: - First version of blogplus. - create_posts_deleted_at_field.php
Remarque: Le code ci-dessus doit être placé dans la méthode Plugin@boot
.
Nous avons une instruction IF pour empêcher notre code d'exécuter sur chaque page, puis nous ajoutons une nouvelle colonne au widget de liste, et nous pouvons également utiliser la méthode removeColumn
pour supprimer toutes les colonnes existantes. Consultez la documentation pour une liste des options de colonne disponibles.
Filtre étendu
La colonne en haut de la liste d'articles permet aux utilisateurs de filtrer les listes à l'aide de dates, de catégories, etc. Dans notre cas, nous avons besoin d'un filtre pour afficher / masquer les articles supprimés.
# 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'); }); } }
Vous pouvez en savoir plus sur les filtres de liste dans la documentation. Le code ci-dessus est assez simple et ne contient que quelques options. Cependant, l'attribut scope
doit être le nom de la méthode de la portée de la requête définie dans l'instance de modèle Models\Post
.
Classe extensible
octobreraixtensionExtendableTraitt Trait fournit une méthode magie pour étendre dynamiquement les classes existantes en ajoutant de nouvelles méthodes, attributs, comportements, etc. Dans notre exemple, nous devons ajouter une nouvelle méthode au modèle d'article pour gérer notre filtre de portée.
// 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', ], ]); });
Nous pouvons faire de même pour addDynamicProperty
, asExtension
, etc. Rafésons notre liste d'articles pour voir si nos modifications fonctionnent.
Bien sûr, nous n'avons pas encore d'articles supprimés, car nous devons terminer la dernière partie: intercepter le fonctionnement de suppression de l'article et uniquement la mise à jour de la colonne deleted_at
.
: Au lieu d'utiliser la propriété scope
, vous pouvez utiliser les conditions pour spécifier une condition simple. Le code suivant fonctionne de la même manière que l'utilisation de la portée du modèle.
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(); } }
événement éloquent
Eloquent déclenche une série d'événements sur chaque opération (créer, mettre à jour, supprimer, etc.). Dans ce cas, nous devons nous accrocher à l'événement de suppression et empêcher la suppression du dossier.
Lors de la suppression d'un enregistrement, l'événement est déclenché avant la réalisation de l'opération de suppression réelle et l'événement deleting
est déclenché par la suite. Si vous retournez false dans l'événement deleted
, l'opération s'abortera. 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); }); }); });Maintenant, nous sommes prêts à tester le résultat final! Continuez à supprimer certains enregistrements, puis accédez à la page de la liste des articles pour voir si vous pouvez changer d'éléments supprimés dans la liste.
Conclusion
Cet article donne un aperçu rapide de la façon d'étendre les différentes parties de la plate-forme octobrecms. Vous pouvez en savoir plus à ce sujet dans la section Plugin d'extension de la documentation. Si vous avez des questions ou des commentaires, veuillez laisser un message ci-dessous!
FAQ sur l'extension des octobres et la construction de plugins de suppression soft
Quel est le but du plug-in de suppression du logiciel dans OctobreCMS?
Le plug-in Soft Delete en octobreCMS est conçu pour empêcher la perte de données permanente. Lorsque vous supprimez un enregistrement, il n'est pas complètement supprimé de la base de données. Au lieu de cela, un horodat
est défini pour l'enregistrement. Cela signifie que du point de vue de l'application, l'enregistrement est considéré comme "supprimé", mais il peut toujours être récupéré si nécessaire. Ceci est particulièrement utile dans les scénarios où les données peuvent être supprimées accidentellement, car elles permet une récupération facile. deleted_at
La suppression dure supprime en permanence les enregistrements de la base de données et ne peut être restaurée que si vous avez une sauvegarde. D'un autre côté, la suppression douce marque simplement l'enregistrement comme supprimé et ne le supprime pas réellement de la base de données. Cela vous permet de récupérer des enregistrements si nécessaire.
Comment implémenter la fonction Soft Delete dans octobrecms?
Pour implémenter la fonction Soft Delete en octobrecms, vous devez créer un plug-in. Cela comprend la création d'un nouveau plugin, l'ajout de colonnes
à la table de la base de données et la mise à jour de votre modèle pour utiliser deleted_at
trait. Vous pouvez ensuite utiliser la méthode SoftDeletes
sur le modèle pour supprimer doucement l'enregistrement et utiliser la méthode delete
pour la récupérer. restore
Vous pouvez tester la fonction Soft Delete en créant des tests unitaires. Cela comprend la création d'un nouveau cas de test, la création d'un nouvel enregistrement dans la base de données, la supprimer doucement, puis affirmant qu'il existe toujours dans la base de données, mais est marqué comme supprimé.
Puis-je utiliser la fonction Soft Delete avec des enregistrements existants?
Oui, vous pouvez utiliser la fonction Soft Delete avec des enregistrements existants. Il vous suffit d'ajouter la colonne
à la table de base de données existante. Cette colonne pour tous les enregistrements existants aura une valeur deleted_at
indiquant qu'ils n'ont pas été supprimés. null
Comment récupérer les enregistrements supprimés en octobre en octobre?
Pour récupérer les enregistrements supprimés en douceur, vous pouvez utiliser la méthode restore
sur le modèle. Cela supprimera l'horodatage deleted_at
de l'enregistrement, le "Undelete" l'a-t-il effectivement.
Puis-je supprimer en permanence des enregistrements supprimés en octobre en octobre?
Oui, vous pouvez supprimer en permanence des enregistrements supprimés en douceur à l'aide de la méthode forceDelete
sur le modèle. Cela supprimera les enregistrements de la base de données comme une suppression dure.
Comment afficher tous les enregistrements, y compris les enregistrements supprimés en octobre en octobre?
Pour afficher tous les enregistrements, y compris les enregistrements supprimés en douceur, vous pouvez utiliser la méthode withTrashed
sur le modèle. Cela renverra tous les enregistrements, qu'ils aient été supprimés en douceur ou non.
Puis-je personnaliser le nom de la colonne deleted_at
d'octobrecms?
Oui, vous pouvez personnaliser le nom de la colonne getDeletedAtColumn
en écrasant la méthode deleted_at
dans le modèle. Si deleted_at
ne convient pas à vos besoins, cela vous permet d'utiliser différents noms de colonnes.
Puis-je désactiver la fonction de suppression douce pour certains enregistrements en octobre?
Oui, vous pouvez désactiver la suppression douce pour certains enregistrements en utilisant la méthode withoutGlobalScope
sur le modèle. Cela vous permet d'exclure certains enregistrements de la fonction Soft Delete.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Pour protéger l'application des attaques XSS liées à la session, les mesures suivantes sont nécessaires: 1. Définissez les drapeaux httponly et sécurisés pour protéger les cookies de session. 2. Codes d'exportation pour toutes les entrées utilisateur. 3. Implémentez la politique de sécurité du contenu (CSP) pour limiter les sources de script. Grâce à ces politiques, les attaques XSS liées à la session peuvent être protégées efficacement et les données utilisateur peuvent être assurées.

Les méthodes pour optimiser les performances de la session PHP incluent: 1. Delay Session Start, 2. Utilisez la base de données pour stocker les sessions, 3. Compress Session Data, 4. Gérer le cycle de vie de la session et 5. Implémenter le partage de session. Ces stratégies peuvent améliorer considérablement l'efficacité des applications dans des environnements de concurrence élevés.

Thesesse.gc_maxlifetimesettingInphpdeterminesthelifespanofessiondata, setInSeconds.1) it'sconfiguredInphp.Iniorviaini_set (). 2)

Dans PHP, vous pouvez utiliser la fonction session_name () pour configurer le nom de session. Les étapes spécifiques sont les suivantes: 1. Utilisez la fonction session_name () pour définir le nom de session, tel que session_name ("my_session"). 2. Après la définition du nom de la session, appelez session_start () pour démarrer la session. La configuration des noms de session peut éviter les conflits de données de session entre plusieurs applications et améliorer la sécurité, mais faire attention à l'unicité, à la sécurité, à la longueur et à la définition du calendrier des noms de session.

L'ID de session doit être régénéré régulièrement lors de la connexion, avant les opérations sensibles et toutes les 30 minutes. 1. Régénérez l'ID de session lors de la connexion pour empêcher les attaques fixes de session. 2. Régénérer avant les opérations sensibles pour améliorer la sécurité. 3. La régénération régulière réduit les risques d'utilisation à long terme, mais l'expérience utilisateur doit être pesée.

La définition des paramètres de cookie de session dans PHP peut être réalisée via la fonction Session_Set_COOKIE_PARAMS (). 1) Utilisez cette fonction pour définir des paramètres, tels que le temps d'expiration, le chemin, le nom de domaine, le drapeau de sécurité, etc.; 2) Appelez session_start () pour que les paramètres prennent effet; 3) Ajuster dynamiquement les paramètres en fonction des besoins, tels que l'état de connexion de l'utilisateur; 4) Faites attention à la définition de drapeaux sécurisés et httponly pour améliorer la sécurité.

L'objectif principal de l'utilisation de sessions en PHP est de maintenir l'état de l'utilisateur entre différentes pages. 1) La session est lancée via la fonction session_start (), créant un ID de session unique et le stockant dans le cookie utilisateur. 2) Les données de session sont enregistrées sur le serveur, permettant de passer les données entre différentes demandes, telles que l'état de connexion et le contenu du panier.

Comment partager une session entre les sous-domaines? Implémenté en définissant des cookies de session pour les noms de domaine communs. 1. Définissez le domaine du cookie de session sur .example.com côté serveur. 2. Choisissez la méthode de stockage de session appropriée, telle que la mémoire, la base de données ou le cache distribué. 3. Passez l'ID de session via des cookies, et le serveur récupère et met à jour les données de session en fonction de l'ID.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Navigateur d'examen sécurisé
Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

Version crackée d'EditPlus en chinois
Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

Listes Sec
SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.