


Comment Laravel utilise Observer pour implémenter le module de gestion des journaux
Jul 10, 2021 pm 03:27 PMÉcrit auparavant :
J'ai écrit deux articles ici pour implémenter la gestion des journaux. Le premier article est un simple suivi d'ajout, de suppression et de modification de modèle et. journalisation . Le deuxième article présente principalement comment le traitement des données par lots via les fichiers importés ne peut pas être bien surveillé et traité. Comment enregistrer cette partie de la logique de traitement des données. Pour plus de détails, veuillez consulter Laravel Log Management pour enregistrer les modifications de données après l'importation de fichiers.
1. Créez le fichier d'observateur. Je souhaite enregistrer le journal des opérations du module d'inventaire de l'entrepôt, donc l'exécution de l'instruction suivante créera le fichier WarehouseInventoryObserver sous app/Observers.
php artisan make:observer WarehouseInventoryObserver --model=WarehouseInventory
Étant donné que les modèles sont placés sous app/Models, le chemin doit être précisé.
php artisan make:observer WarehouseInventoryObserver --model=Models/WarehouseInventory
Ouvrez l'observateur sous AppProvidersAppServiceProvider
public function boot() { WarehouseInventory::observe(WarehouseInventoryObserver::class); }
2. Surveillez les opérations d'ajout, de suppression et de modification sous ce module. Bien entendu, le référentiel peut être utilisé ici, ou le modèle peut être utilisé directement. créé, mis à jour et supprimé surveillent respectivement les opérations nouvelles, mises à jour et supprimées du modèle WarehouseInventory.
<?phpnamespace App\Observers;use App\Models\Warehouse;use App\Models\WarehouseInventory;use App\Repositories\ActionLogRepository;use Illuminate\Support\Arr;use Illuminate\Support\Facades\Auth;class WarehouseInventoryObserver{ protected $user_id; protected $warehouse; protected $actionLogRepository; public function __construct( Warehouse $warehouse, ActionLogRepository $actionLogRepository ) { $this->user_id = Auth::user() ? Auth::user()->id : null; $this->warehouse = $warehouse->pluck('name', 'id'); $this->actionLogRepository = $actionLogRepository; } //创建 public function created(WarehouseInventory $warehouseInventory) { if (!empty($this->user_id)) { $attributes = $warehouseInventory->getAttributes(); $attributes = Arr::only($attributes, ['warehouse_id', 'seller_sku', 'quantity', 'box']); $warehouse = $this->warehouse->get($attributes['warehouse_id']); //拼接数据 $data = [ 'module' => 'warehouse_inventory', 'user_id' => $this->user_id, 'type' => 'create', 'content' => [ 'warehouse' => $warehouse, 'seller_sku' => $attributes['seller_sku'], 'original_quantity' => 0, 'current_quantity' => $attributes['quantity'], 'box' => $attributes['box'] ] ]; $this->actionLogRepository->makeModel()->create($data); } } //更新 public function updated(WarehouseInventory $warehouseInventory) { if (!empty($this->user_id)) { $original = $warehouseInventory->getOriginal(); $dirty = $warehouseInventory->getDirty(); $dirty = Arr::except($dirty, ['remark', 'updated_at']); if (count($dirty)) { if (Arr::has($dirty, 'warehouse_id')) { $warehouse = $this->warehouse->get($dirty['warehouse_id']); } else { $warehouse = $this->warehouse->get($original['warehouse_id']); } //拼接数据 $data = [ 'module' => 'warehouse_inventory', 'user_id' => $this->user_id, 'type' => 'update', 'content' => [ 'warehouse' => $warehouse, 'seller_sku' => $original['seller_sku'], 'original_quantity' => $original['quantity'], 'current_quantity' => $dirty['quantity'], 'box' => (Arr::has($dirty, 'box')) ? $dirty['box'] : $original['box'] ] ]; $this->actionLogRepository->makeModel()->create($data); } } } //删除 public function deleted(WarehouseInventory $warehouseInventory) { if (!empty($this->user_id)) { $original = $warehouseInventory->getOriginal(); $warehouse = $this->warehouse->get($original['warehouse_id']); //拼接数据 $data = [ 'module' => 'warehouse_inventory', 'user_id' => $this->user_id, 'type' => 'delete', 'content' => [ 'warehouse' => $warehouse, 'seller_sku' => $original['seller_sku'], 'original_quantity' => $original['quantity'], 'current_quantity' => 0, 'box' => $original['box'] ] ]; $this->actionLogRepository->makeModel()->create($data); } }}
3, base de données
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

PHP vs Flutter : le meilleur choix pour le développement mobile

Comment utiliser le mappage objet-relationnel (ORM) en PHP pour simplifier les opérations de base de données ?

Analyse des avantages et inconvénients des outils de tests unitaires PHP

Architecture et pratique du système distribué PHP

Comparaison des dernières versions de Laravel et CodeIgniter

Comment les capacités de traitement des données de Laravel et de CodeIgniter se comparent-elles ?

Tests unitaires de code PHP et tests d'intégration
