Aller au contenu | Aller au menu | Aller à la recherche

Développement Web

Fil des billets - Fil des commentaires

20 juillet 2021

Formulaire Symfony : empêcher un nombre d'être arrondi

Dans un formulaire Symfony, si vous attendez que l'utilisateur saisisse un nombre décimal, alors vous utiliserai naturellement le type de champ NumberType.

Toutefois, le type de champ NumberType arrondi systématiquement la valeur envoyée (par défaut à 3 chiffres derrières la virgule). Ce comportement peut être ajusté via l'option scale. Mais l'option scale n'est pas désactivable et vous ne pourrez pas empêcher Symfony d'arrondir la valeur.

Si vous voulez empêcher Symfony d'arrondir la valeur saisie, il faut utiliser le type TextType.

Mais attention ! Utiliser simplement le type TextType ne suffira pas. Vous devez vous assurer que la chaîne de caractères saisie contienne bien un nombre décimal. Pour cela, il faut ajouter une contrainte de validation. La contrainte Type est ce qu'il vous faut !

Voici le code nécessaire pour avoir un champ de formulaire qui accepte seulement une chaîne numérique :

<?php

declare(strict_types=1);

namespace Foo;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\Type;

final class FooType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('numeric', TextType::class, [
            'constraints' => new Type(['type' => 'numeric'])
        ]);
    }
}

11 février 2020

Fichier CSV généré avec PHP: forcer Excel à reconnaître l'UTF-8

Si vous générez un fichier CSV avec PHP, par exemple:

<?php

$csv = fopen('file.csv', 'w');
fputcsv($csv, ['é', 'è', 'à']);
fclose($csv);

Le fichier sera correctement généré, comme nous pouvons le voir en ouvrant le fichier file.csv avec un éditeur de texte :

 CSV ouvert avec le bloc-note

 Toutefois, si nous ouvrons le fichier avec Excel, le support de l'UTF-8 n'est pas pris en charge :

 CSV ouvert avec le bloc-note

Pour résoudre ce problème, il faut ajouter le BOM suivant au début du fichier: EF BB BF

Ce qui donne :

<?php

$csv = fopen('file.csv', 'w');
fwrite($csv, "\xEF\xBB\xBF"); // Doubles quotes obligatoires !
fputcsv($csv, ['é', 'è', 'à']);
fclose($csv);

Résultat :

CSV ouvert avec le bloc-note

Quelques explications :

En Unicode, l'indicateur d'ordre des octets ou BOM (pour l'anglais byte order mark) est une donnée qui indique l'utilisation d'un encodage unicode ainsi que l'ordre des octets, généralement situé au début de certains fichiers texte. (Source: Wikipédia)

La séquence d'octets EF BB BF est utilisé comme marqueur pour indiquer que le texte est codé en UTF-8.

25 juillet 2019

OVH: utiliser une version de PHP différente par sous-domaine

Sur les offres d'hébergements mutualisés OVH, il est possible de définir une version différente de PHP par sous-domaine.

Prenons par exemple l'arborescence suivante en indiquant les versions de PHP voulues:

/home
  |__ www (PHP 7.1)
  |__ sous-domaine1 (PHP 7.2)
  |__ sous-domaine2 (PHP 7.3)
  .ovhconfig

Vous devriez avoir à la racine de votre hébergement un fichier .ovhconfig qui ressemble à celui-ci:

app.engine=php
app.engine.version=7.3
http.firewall=none
environment=production
container.image=stable

Si ce n'est pas le cas, prenez cet exemple. Ce fichier reprend la configuration visible depuis votre manager OVH.

Il faut placer un fichier .ovhconfig à la racine de chaque sous-domaine en modifiant la valeur de la clé "app.engine.version" par la version de PHP voulue.

Si on reprend l'exemple précédent, il faut :

  • Placer dans le dossier www/ une copie du fichier .ovhconfig en modifiant app.engine.version=7.3 par app.engine.version=7.1
  • Placer dans le dossier sous-domaine1/ une copie du fichier .ovhconfig en modifiant app.engine.version=7.3 par app.engine.version=7.2
  • Placer dans le dossier sous-domaine2/ une copie du fichier .ovhconfig (dans notre cas sans modification car nous voulons la version 7.3)

Erreur "Not Implemented"

Si vous rencontrez une erreur "Not Implemented", rendez-vous dans la configuration de votre hébergement sur le manager OVH et choisissez la version de PHP la plus récente:

20 mars 2015

Comment créer un sous-domaine facilement chez Gandi

L’histoire

Vous venez d’acquérir un hébergement chez Gandi et vous souhaitez mettre en place un sous-domaine afin d’avoir une jolie adresse Internet pour votre blog, par exemple.

Pour rappel, un sous-domaine est la partie de l’adresse Internet qui précède le nom de domaine : https://sous-domaine.nom-de-domaine.tld.

Exemple avec https://blog.maximepinot.com où blog est le sous-domaine, maximepinot est le nom de domaine et .com le domaine de premier niveau.

La principale utilité des sous-domaines est de pouvoir définir une adresse pour chaque partie d’un site web. Sans sous-domaine, l’adresse Internet de mon blog serait : https://www.maximepinot.com/blog. Personnellement, je trouve cela moins esthétique.

Comme toute personne munie de bon sens, vous allez commencer par consulter la documentation en ligne (le Wiki) sur le site de Gandi pour trouver une solution. Bonne idée car il y a effectivement une page « Comment créer un sous-domaine ». On commence à vous parler de DNS, puis d’enregistrement A, puis d’enregistrement CNAME, on vous demande d’indiquer une adresse IP… Bref, vous y comprenez rien et vous êtes totalement perdu ! Je vous comprends !

Vous continuez quand même à chercher une solution et vous tombez sur une autre page : « Redirigez votre domaine ou votre sous-domaine vers un site web existant ». On vous propose de faire une redirection web.

Parfait ! Ça ressemble parfaitement à ce que nous cherchons à faire ! Nous avons plus qu’à indiquer le sous-domaine (blog) et le répertoire où se trouve nos fichiers (www.mon-nom-de-domaine.com/blog) et c’est bon !

Problème: On peut effectivement désormais accéder à blog.mon-nom-de-domaine.com mais cela nous redirige vers www.mon-nom-de-domaine.com/blog. Notre but est d’avoir continuellement comme adresse Internet notre sous-domaine. Exemple: blog.maximepinot.com/index.php à la place de www.maximepinot.com/blog/index.php.

Bon. Vous oubliez la documentation et vous vous rendez sur le forum de Gandi. Vous êtes sûrement pas le seul/la seule à rencontrer ce problème. Effectivement, beaucoup de gens sur le forum cherchent aussi à créer un sous-domaine. Malheureusement, les quelques réponses apportées ne vous aide pas…

La solution

  • Connectez-vous sur votre interface d’administration.
  • Allez sur la page de gestion de votre hébergement Simple Hosting.
  • Cliquez sur le nom de votre instance.
  • Au milieu de la page, vous trouverez une partie intitulée « Sites ».
  • Cliquez sur « Ajouter ».
  • Dans le champ « Adresse (vhost) », entrez l’adresse complète souhaitée : le sous-domaine + votre nom de domaine.tld, puis cliquez sur « Valider ».
  • Cliquez sur l’icône à côté de votre nouvelle adresse pour mettre à jour les DNS.
    Remarque : Il faudra attendre quelques heures pour que les DNS se mettent à jour et pouvoir accéder à l’adresse créée.
  • Connectez-vous à votre sftp. Vous remarquerez qu’un nouveau dossier (portant le nom de l’adresse que vous venez d’ajouter) a été créé dans votre dossier vhosts. Tous les fichiers de ce sous-domaine devront être placés dans ce dossier.

Mes expériences précédentes

Ce n’est pas la première fois que je souhaite créer un sous-domaine pour un de mes sites Internet. Tous les autres hébergeurs que j’ai connus utilisaient CPanel comme interface d’administration.

Il faut avouer que ce dernier est bien plus intuitif en ce qui concerne la création de sous-domaines.

Dans l’interface d’administration, il suffit de se rendre tout simplement dans la partie « Sous-domaine » et indiquer le nom du sous-domaine souhaité ainsi que le répertoire où se trouve nos fichiers (de la même manière qu’une redirection web chez Gandi). En deux clics, c’est réglé !

Vous avez vécu la même histoire ? Vous souhaitez apporter des améliorations à cet article ?
Dites-moi tout dans les commentaires ! ;)