Aller au contenu principal

Supabase avec Symfony

Intégration de Supabase dans Symfony 7

Supabase est une alternative open source à Firebase qui offre :

  • une base de données PostgreSQL,
  • une authentification,
  • des API instantanées,
  • et un stockage de fichiers en temps réel.

Présentation de Supabase

Supabase est une plateforme de développement qui combine plusieurs services essentiels :

  • Base de données PostgreSQL : Une base de données relationnelle puissante et extensible
  • Authentification : Système d'authentification sécurisé et personnalisable
  • Stockage : Stockage de fichiers avec gestion des autorisations
  • API instantanée : Génération automatique d'API RESTful et GraphQL
  • Fonctions Edge : Exécution de code côté serveur

Intégration de Supabase dans Symfony 7

Voici les étapes détaillées pour intégrer Supabase dans votre projet Symfony 7 :

1. Installation du client Supabase

Installez le client Supabase via Composer :

composer require supabase/supabase-php

2. Configuration de l'environnement

Ajoutez vos identifiants Supabase dans le fichier .env :

SUPABASE_URL=https://votre-projet.supabase.co
SUPABASE_KEY=votre-clé-api

3. Création d'un service Supabase

Créez un service Symfony pour encapsuler les fonctionnalités Supabase :

// src/Service/SupabaseService.php
namespace App\Service;

use Supabase\Client;
use Supabase\SupabaseClient;

class SupabaseService
{
private SupabaseClient $client;

public function __construct(string $supabaseUrl, string $supabaseKey)
{
$this->client = new Client($supabaseUrl, $supabaseKey);
}

public function getClient(): SupabaseClient
{
return $this->client;
}
}

4. Configuration du service

Configurez le service dans config/services.yaml :

services:
App\Service\SupabaseService:
arguments:
$supabaseUrl: '%env(SUPABASE_URL)%'
$supabaseKey: '%env(SUPABASE_KEY)%'

5. Utilisation dans un contrôleur

Voici un exemple d'utilisation dans un contrôleur Symfony :

use App\Service\SupabaseService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class ExempleController extends AbstractController
{
#[Route('/exemple', name: 'app_exemple')]
public function index(SupabaseService $supabaseService): Response
{
$client = $supabaseService->getClient();

// Exemple de requête à la base de données
$response = $client->from('users')->select('*')->execute();
$users = $response->data;

return $this->render('exemple/index.html.twig', [
'users' => $users,
]);
}
}

Fonctionnalités avancées

Authentification

Pour gérer l'authentification avec Supabase :

// Inscription
$response = $client->auth()->signUp([
'email' => 'exemple@email.com',
'password' => 'motdepasse123'
]);

// Connexion
$response = $client->auth()->signIn([
'email' => 'exemple@email.com',
'password' => 'motdepasse123'
]);

Stockage de fichiers

Pour gérer le stockage de fichiers :

// Téléchargement d'un fichier
$response = $client->storage()->from('bucket')->upload('chemin/fichier.jpg', '/chemin/local/fichier.jpg');

// Téléchargement d'un fichier
$response = $client->storage()->from('bucket')->download('chemin/fichier.jpg');

Bonnes pratiques

  • Utilisez les variables d'environnement pour stocker les clés d'API Supabase
  • Créez des repositories Symfony pour encapsuler les opérations Supabase spécifiques à chaque entité
  • Utilisez le système de cache de Symfony pour optimiser les performances des requêtes fréquentes

En suivant ces étapes et recommandations, vous pourrez intégrer efficacement Supabase dans votre projet Symfony 7, bénéficiant ainsi d'une base de données puissante, d'une authentification robuste et d'un stockage de fichiers flexible.