Ce fichier PHP est un gestionnaire (handler) dans une application Mezzio, spécifiquement pour ajouter des données à une base de données. Il implémente RequestHandlerInterface de PSR-7, ce qui le rend compatible avec le modèle de gestion de requêtes HTTP de Mezzio. Voici une explication détaillée avec des commentaires pour chaque section importante :

<?php
// src/App/Handler/AddDataHandler.php

namespace App\Handler;

use Laminas\Db\Adapter\Adapter;
use Laminas\Db\Sql\Select;
use Laminas\Db\Sql\Sql;
use Laminas\Diactoros\Response\JsonResponse;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;

class AddDataHandler implements RequestHandlerInterface
{
    private $adapter;

    public function __construct(Adapter $adapter)
    {
        $this->adapter = $adapter;
        // Constructeur qui initialise l'adaptateur de base de données
    }

    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $data = $request->getParsedBody();
        // Récupère les données envoyées dans la requête

        // Vérifie si l'email existe déjà dans la base de données
        $sqlCheck = new Sql($this->adapter);
        $select = $sqlCheck->select()
            ->from('players')
            ->where(['email' => $data['email']]);
        $statement = $sqlCheck->prepareStatementForSqlObject($select);
        $result = $statement->execute();

        if ($result->current()) {
            // Si l'email existe déjà, mettez à jour les champs avec des valeurs par défaut
            $sql = 'UPDATE players SET score=0, treasures_found=0, animals_crushed=0 WHERE email=?';
            $this->adapter->query($sql, [$data['email']]);
            return new JsonResponse(['status' => 'success', 'message' => 'Updated existing player']);
        } else {
            // Si l'email n'existe pas, insérez un nouvel enregistrement
            $sql = 'INSERT INTO players (email, score, treasures_found, animals_crushed) VALUES (?, 0, 0, 0)';
            $this->adapter->query($sql, [$data['email']]);
            return new JsonResponse(['status' => 'success', 'message' => 'Added new player']);
        }
    }
}

Ce gestionnaire effectue les opérations suivantes :

  1. Initialisation : Le constructeur initialise l'adaptateur de base de données (Adapter), qui est utilisé pour interagir avec la base de données.

  2. Traitement de la Requête : La méthode handle est appelée pour chaque requête HTTP correspondant à ce gestionnaire. Elle récupère les données de la requête.

  3. Vérification dans la Base de Données : Le script vérifie d'abord si un enregistrement avec l'email fourni existe déjà dans la table players.

  4. Mise à Jour ou Insertion : Si un enregistrement existe, il est mis à jour avec des valeurs par défaut. Sinon, un nouvel enregistrement est créé.

  5. Réponse JSON : Le gestionnaire retourne une réponse JSON indiquant le succès de l'opération, soit en mettant à jour un joueur existant, soit en ajoutant un nouveau joueur.

Ce fichier est un exemple de gestionnaire de requêtes dans Mezzio, utilisant l'adaptateur de base de données Laminas pour effectuer des opérations CRUD (Create, Read, Update, Delete) sur une base de données.

Modifié le: jeudi 18 janvier 2024, 10:49