国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table des matières
points clés
Introduction
Plugin de blog Rainlab
Créez un nouveau plug-in
Mode de base de données étendu
Liste d'articles étendus
Filtre étendu
Classe extensible
événement éloquent
Comment récupérer les enregistrements supprimés en octobre en octobre?
Puis-je supprimer en permanence des enregistrements supprimés en octobre en octobre?
Comment afficher tous les enregistrements, y compris les enregistrements supprimés en octobre en octobre?
Puis-je personnaliser le nom de la colonne deleted_at d'octobrecms?
Puis-je désactiver la fonction de suppression douce pour certains enregistrements en octobre?
Maison développement back-end tutoriel php Extension d'octobre - construire un plugin à suppression douce

Extension d'octobre - construire un plugin à suppression douce

Feb 10, 2025 am 10:21 AM

Extending OctoberCMS - Building a Soft-Delete Plugin

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.

Extending OctoberCMS - Building a Soft-Delete Plugin

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énement deleting déclenché par éloquent, empêchant la suppression des enregistrements. Au lieu de cela, le champ deleted_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.

Extending OctoberCMS - Building a Soft-Delete Plugin

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.

Extending OctoberCMS - Building a Soft-Delete Plugin Extending OctoberCMS - Building a Soft-Delete Plugin

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.

Astuce

: 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

Quelle est la différence entre la suppression douce et la suppression dure?

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

Comment tester la fonction Soft Delete en octobrecms?

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment mettre en ?uvre l'authentification et l'autorisation dans PHP? Comment mettre en ?uvre l'authentification et l'autorisation dans PHP? Jun 20, 2025 am 01:03 AM

ToseCurelyHandleAuthentication andAuthorizationInPhp, suivitheSesteps: 1.AlwayShashPasswordSwithPassword_Hash () etverifyusingPassword_verify (), usePreparedStatementStopReventsQLendiject, andstoreSerDatain $ _SessionAfterLogin.2

Comment pouvez-vous gérer les téléchargements de fichiers en toute sécurité dans PHP? Comment pouvez-vous gérer les téléchargements de fichiers en toute sécurité dans PHP? Jun 19, 2025 am 01:05 AM

Pour gérer en toute sécurité les téléchargements de fichiers dans PHP, le noyau consiste à vérifier les types de fichiers, à renommer les fichiers et à restreindre les autorisations. 1. Utilisez finfo_file () pour vérifier le type de mime réel, et seuls des types spécifiques tels que l'image / jpeg sont autorisés; 2. Utilisez Uniqid () pour générer des noms de fichiers aléatoires et les stocker dans le répertoire racine non Web; 3. Limiter la taille du fichier via les formulaires PHP.ini et HTML et définir les autorisations de répertoire sur 0755; 4. Utilisez Clamav pour scanner les logiciels malveillants pour améliorer la sécurité. Ces étapes empêchent efficacement les vulnérabilités de sécurité et garantissent que le processus de téléchargement de fichiers est s?r et fiable.

Quelles sont les différences entre == (comparaison lache) et === (comparaison stricte) en PHP? Quelles sont les différences entre == (comparaison lache) et === (comparaison stricte) en PHP? Jun 19, 2025 am 01:07 AM

En PHP, la principale différence entre == et == est la rigueur de la vérification des types. == La conversion de type sera effectuée avant la comparaison, par exemple, 5 == "5" Renvoie True, et === Demande que la valeur et le type soient les mêmes avant que True sera renvoyé, par exemple, 5 === "5" Renvoie False. Dans les scénarios d'utilisation, === est plus sécurisé et doit être utilisé en premier, et == n'est utilisé que lorsque la conversion de type est requise.

Comment effectuer des opérations arithmétiques en php (, -, *, /,%)? Comment effectuer des opérations arithmétiques en php (, -, *, /,%)? Jun 19, 2025 pm 05:13 PM

Les méthodes d'utilisation des opérations mathématiques de base en PHP sont les suivantes: 1. Les signes d'addition prennent en charge les entiers et les nombres à virgule flottante, et peuvent également être utilisés pour les variables. Les numéros de cha?ne seront automatiquement convertis mais non recommandés en dépendances; 2. Les signes de soustraction utilisent - les signes, les variables sont les mêmes et la conversion de type est également applicable; 3. Les panneaux de multiplication utilisent * les panneaux, qui conviennent aux nombres et aux cha?nes similaires; 4. La division utilise / signes, qui doit éviter de diviser par zéro, et noter que le résultat peut être des nombres à virgule flottante; 5. Prendre les signes du module peut être utilisé pour juger des nombres impairs et uniformes, et lors du traitement des nombres négatifs, les signes restants sont cohérents avec le dividende. La clé pour utiliser correctement ces opérateurs est de s'assurer que les types de données sont clairs et que la situation limite est bien gérée.

Comment pouvez-vous interagir avec les bases de données NoSQL (par exemple, MongoDB, redis) de PHP? Comment pouvez-vous interagir avec les bases de données NoSQL (par exemple, MongoDB, redis) de PHP? Jun 19, 2025 am 01:07 AM

Oui, PHP peut interagir avec les bases de données NoSQL comme MongoDB et Redis à travers des extensions ou des bibliothèques spécifiques. Tout d'abord, utilisez le pilote MongoDBPHP (installé via PECL ou Composer) pour créer des instances clients et faire fonctionner des bases de données et des collections, en prenant en charge l'insertion, la requête, l'agrégation et d'autres opérations; Deuxièmement, utilisez la bibliothèque Predis ou l'extension PHPREDIS pour vous connecter à Redis, effectuer des paramètres et des acquisitions de valeur clé, et recommander PHPredis pour des scénarios à haute performance, tandis que Predis est pratique pour un déploiement rapide; Les deux conviennent aux environnements de production et sont bien documentés.

Comment rester à jour avec les derniers développements PHP et meilleures pratiques? Comment rester à jour avec les derniers développements PHP et meilleures pratiques? Jun 23, 2025 am 12:56 AM

TostayCurrentwithPhpDevelopments andBestPractices, suiventyewnewsources likephp.netandphpweekly, engagewithcommunitiesonforumums et conférences, keeptoolingupdated etgradualadoptnewfeatures, etreadorontruttetoopensourceprojects.

Qu'est-ce que PHP et pourquoi est-il utilisé pour le développement Web? Qu'est-ce que PHP et pourquoi est-il utilisé pour le développement Web? Jun 23, 2025 am 12:55 AM

PhpBecamepopularforwebDevelopmentDuetoitSeaseOflearning, Samoussentegration withhtml, widespreadhostingsupport, andalargecosystemysteclustingframeworkslikeLaravelandcmsplateformeslikewordpress.itexcelSinlingFormSubMissions, ManagetingSeSeSessions, interactif, interactif

Comment définir le fuseau horaire PHP? Comment définir le fuseau horaire PHP? Jun 25, 2025 am 01:00 AM

Tosetherighttimezoneinphp, usedate_default_timezone_set () Fonctionnellestartofyourscriptwithavalididentifiersuchas'america / new_york'.1.usedate_default_timezone_set () beforeanydate / timefunctions.20

See all articles