# 📷 Portfolio Photo — Symfony 6.4 + MySQL

Site portfolio photographe avec galeries multiples et panneau d'administration.

## Prérequis

- PHP 8.1+ avec extensions : `pdo_mysql`, `intl`, `gd`, `ctype`, `iconv`
- Composer 2+
- MySQL 8.0+ ou MariaDB 10.4+
- (optionnel) Symfony CLI

## Installation

### 1. Installer les dépendances

```bash
composer install
```

> ⚠️ Si tu vois une erreur `symfony/runtime`, c'est normal : le script
> `cache:clear` est lancé automatiquement après install mais la BDD n'est
> pas encore configurée. L'erreur disparaît après l'étape 2.

### 2. Configurer l'environnement

```bash
cp .env .env.local
```

Edite `.env.local` :

```env
APP_SECRET=une_chaine_aleatoire_de_32_caracteres_min
DATABASE_URL="mysql://utilisateur:motdepasse@127.0.0.1:3306/portfolio_photo?serverVersion=8.0&charset=utf8mb4"
```

### 3. Créer la base de données et lancer la migration

```bash
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate
```

### 4. Créer le compte administrateur

```bash
php bin/console app:create-admin
```

Le script te demande identifiant et mot de passe interactivement.

### 5. Permissions uploads

```bash
mkdir -p public/uploads/photos
chmod 775 public/uploads/photos
```

### 6. Lancer le serveur de développement

```bash
# Avec Symfony CLI (recommandé) :
symfony serve

# Ou avec PHP natif :
php -S localhost:8000 -t public/
```

- Site public : http://localhost:8000
- Admin : http://localhost:8000/login

---

## Résolution de problèmes courants

### `symfony/runtime is missing`
Le fichier `bin/console` et `public/index.php` de ce projet n'utilisent
**pas** `symfony/runtime` — ils sont écrits en style classique Symfony 5/6.
Si tu vois quand même cette erreur :

```bash
composer require symfony/runtime
# puis relancer
php bin/console cache:clear
```

### `[ERROR] An exception occurred in the driver`
La base de données n'est pas encore créée ou les identifiants sont faux.
Vérifie `DATABASE_URL` dans `.env.local` et relance :

```bash
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate
```

### Erreur `Class App\Kernel not found`
```bash
composer dump-autoload
```

### Cache
```bash
php bin/console cache:clear
php bin/console cache:warmup
```

---

## Structure

```
portfolio-photo/
├── bin/console                    # CLI Symfony
├── config/
│   ├── bundles.php                # Bundles activés
│   ├── packages/                  # Config par package
│   └── routes.yaml                # Routes
├── migrations/
│   └── Version20240101000000.php  # Migration initiale (tables + données)
├── public/
│   ├── index.php                  # Front controller
│   ├── css/app.css                # Styles site public
│   ├── css/admin.css              # Styles admin
│   ├── js/app.js                  # JS (tabs, lightbox)
│   └── uploads/photos/            # Photos uploadées
├── src/
│   ├── Command/CreateAdminCommand.php
│   ├── Controller/
│   │   ├── GalleryController.php  # Site public
│   │   ├── SecurityController.php # Login/logout
│   │   └── AdminController.php    # CRUD admin
│   ├── Entity/
│   │   ├── User.php
│   │   ├── Gallery.php
│   │   ├── Photo.php
│   │   └── SiteSettings.php
│   ├── Repository/
│   ├── Service/ImageUploader.php  # Upload + resize GD
│   └── Kernel.php
└── templates/
    ├── base.html.twig
    ├── home/index.html.twig
    ├── gallery/{show,contact}.html.twig
    ├── security/login.html.twig
    └── admin/
        ├── base.html.twig
        ├── dashboard.html.twig
        ├── settings.html.twig
        ├── photos/{index,form}.html.twig
        └── galleries/{index,form}.html.twig
```

## Routes principales

| URL | Accès | Description |
|-----|-------|-------------|
| `/` | Public | Accueil, toutes les galeries |
| `/galerie/{slug}` | Public | Galerie individuelle |
| `/contact` | Public | Formulaire contact |
| `/login` | Public | Connexion admin |
| `/logout` | Connecté | Déconnexion |
| `/admin` | ROLE_ADMIN | Dashboard |
| `/admin/photos` | ROLE_ADMIN | Liste photos |
| `/admin/photos/add` | ROLE_ADMIN | Ajouter photos (multi-upload) |
| `/admin/photos/{id}/edit` | ROLE_ADMIN | Modifier photo |
| `/admin/photos/{id}/delete` | ROLE_ADMIN | Supprimer photo |
| `/admin/galleries` | ROLE_ADMIN | Gérer galeries |
| `/admin/settings` | ROLE_ADMIN | Paramètres (Instagram, Facebook…) |

## Déploiement VPS (OVH / Apache)

```apache
<VirtualHost *:80>
    ServerName tondomaine.fr
    DocumentRoot /var/www/portfolio/public

    <Directory /var/www/portfolio/public>
        AllowOverride All
        Require all granted
        FallbackResource /index.php
    </Directory>
</VirtualHost>
```

```bash
# Sur le serveur :
composer install --no-dev --optimize-autoloader
APP_ENV=prod php bin/console cache:clear
php bin/console doctrine:migrations:migrate --no-interaction
chmod 775 public/uploads/photos
```

---

> Symfony 6.4 LTS — Support jusqu'à novembre 2027
