Yii2 framework backup
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

14 KiB

Formatage des données

Pour afficher des données dans un format plus facile à lire par les utilisateurs, vous pouvez les formater en utilisant le composant d'application formatter. Par défaut, le formateur est mis en œuvre par yii\i18n\Formatter qui fournit un jeu de méthodes pour formater des données telles que des dates, des temps, des nombres, des monnaies et autres données couramment utilisées. Vous pouvez utiliser le formateur de la manière indiquée ci-dessous :

$formatter = \Yii::$app->formatter;

// affiche : January 1, 2014
echo $formatter->asDate('2014-01-01', 'long');
 
// affiche : 12.50%
echo $formatter->asPercent(0.125, 2);
 
// affiche : <a href="mailto:cebe@example.com">cebe@example.com</a>
echo $formatter->asEmail('cebe@example.com'); 

// affiche : Yes
echo $formatter->asBoolean(true); 
// il prend aussi en charge l'affichage de valeurs nulles :

// affiche : (Not set)
echo $formatter->asDate(null); 

Comme vous pouvez le voir, ces trois méthodes sont nommées selon le format suivant asXyz(), où Xyz représente un format pris en charge. En alternative, vous pouvez formater les données en utilisant la méthode générique yii\i18n\Formatter::format(), qui vous permet de contrôler le format désiré par programmation et qui est communément utilisé par les composants graphiques tels que yii\grid\GridView et yii\widgets\DetailView. Par exemple :

// affiche : January 1, 2014
echo Yii::$app->formatter->format('2014-01-01', 'date'); 

// vous pouvez aussi utiliser un tableau pour spécifier les paramètres de votre méthode de formatage :
// `2` est la valeur du paramètre `$decimals` (nombre de décimales) pour la méthode asPercent().
// affiche : 12.50%
echo Yii::$app->formatter->format(0.125, ['percent', 2]); 

Note: le composant de formatage est conçu pour formater des valeurs à présenter à l'utilisateur. Si vous voulez convertir des entrées utilisateur en un format lisible par la machine, ou simplement formater une date dans un format lisible par la machine, le formateur n'est pas l'outil adapté à cela. Pour convertir une entrée utilisateur pour une date et un temps, vous pouvez utiliser yii\validators\DateValidator et yii\validators\NumberValidator respectivement. Pour une simple conversion entre les formats lisibles par la machine de date et de temps, la fonction PHP date() suffit.

Configuration du formateur

Vous pouvez configurer les règles de formatage en configurant le composant formatter dans la configuration de l'application. Par exemple :

return [
    'components' => [
        'formatter' => [
            'dateFormat' => 'dd.MM.yyyy',
            'decimalSeparator' => ',',
            'thousandSeparator' => ' ',
            'currencyCode' => 'EUR',
       ],
    ],
];

Reportez-vous à la classe yii\i18n\Formatter pour connaître les propriétés qui peuvent être configurées.

Formatage de valeurs de dates et de temps

Le formateur prend en charge les formats de sortie suivants en relation avec les dates et les temps :

Les formats par défaut pour les dates et les temps utilisés pour les méthodes yii\i18n\Formatter::asDate(), yii\i18n\Formatter::asTime(), et yii\i18n\Formatter::asDatetime() peuvent être configurés globalement en configurant yii\i18n\Formatter::dateFormat, yii\i18n\Formatter::timeFormat, et yii\i18n\Formatter::datetimeFormat.

Vous pouvez spécifier les formats de date et de temps en utilisant la syntaxe ICU. Vous pouvez aussi utiliser la syntaxe date() de PHP avec le préfixe php: pour la différentier de la syntaxe ICU. Par exemple :

// format ICU
echo Yii::$app->formatter->asDate('now', 'yyyy-MM-dd'); // 2014-10-06

// format date() de PHP
echo Yii::$app->formatter->asDate('now', 'php:Y-m-d'); // 2014-10-06

Lorsque vous travaillez avec des applications qui requièrent une prise en charge de plusieurs langues, vous devez souvent spécifier différents formats de dates et de temps pour différentes locales. Pour simplifier cette tâche, vous pouvez utiliser les raccourcis de formats (p. ex. long, short), à la place. Le formateur transforme un raccourci de formats en un format approprié en prenant en compte la yii\i18n\Formatter::locale courante. Les raccourcis de formats suivants sont pris en charge (les exemples supposent que en_GB est la locale courante) :

  • short: affiche 06/10/2014 pour une date et 15:58 pour un temps;
  • medium: affiche 6 Oct 2014 et 15:58:42;
  • long: affiche 6 October 2014 et 15:58:42 GMT;
  • full: affiche Monday, 6 October 2014 et 15:58:42 GMT.

Depuis la version 2.0.7, il est aussi possible de formater les dates dans différents systèmes calendaires. Reportez-vous à la documentation de l'API pour la propriété yii\i18n\Formatter::$calendar des formateurs pour savoir comment définir un autre système calendaire.

Fuseaux horaires

Lors du formatage des dates et des temps, Yii les convertit dans le yii\i18n\Formatter::timeZone cible. La valeur à formater est supposée être donnée en UTC, sauf si un fuseau horaire est explicitement défini ou si vous avez configuré yii\i18n\Formatter::defaultTimeZone.

Dans les exemples qui suivent, nous supposons que la cible yii\i18n\Formatter::timeZone est définie à Europe/Berlin.

// formatage d'un horodatage UNIX comme un temps
echo Yii::$app->formatter->asTime(1412599260); // 14:41:00

// formatage d'une chaîne de caractère date-temps (en UTC) comme un temps 
echo Yii::$app->formatter->asTime('2014-10-06 12:41:00'); // 14:41:00

// formatage d'une chaîne de caractères date-temps (en CEST) comme un temps
echo Yii::$app->formatter->asTime('2014-10-06 14:41:00 CEST'); // 14:41:00

Note: comme les fuseaux horaires sont assujettis à des règles fixées par les gouvernements du monde entier, et que ces règles peuvent varier fréquemment, il est vraisemblable que vous n'ayez pas la dernière information dans la base de données des fuseaux horaires installée sur votre système. Vous pouvez vous reporter au manuel d'ICU pour des informations sur la manière de mettre cette base de données à jour. Reportez-vous aussi au tutoriel Configurer votre environnement PHP pour l'internationalisation.

Formatage des nombres

Pour les nombres, le formateur prend en charge les formats de sortie suivants :

Le format pour un nombre peut être ajusté en utilisant yii\i18n\Formatter::decimalSeparator et yii\i18n\Formatter::thousandSeparator, qui prennent tous les deux les valeurs par défaut déterminées par la yii\i18n\Formatter::locale courante.

Pour une configuration plus avancée, yii\i18n\Formatter::numberFormatterOptions et yii\i18n\Formatter::numberFormatterTextOptions peuvent être utilisés pour configurer la classe NumberFormater (formateur de nombres) utilisée en interne pour implémenter le formateur. Par exemple, pour ajuster la valeur minimum et maximum des chiffres fractionnaires, vous pouvez configurer la propriété yii\i18n\Formatter::numberFormatterOptions comme ceci :

'numberFormatterOptions' => [
    NumberFormatter::MIN_FRACTION_DIGITS => 0,
    NumberFormatter::MAX_FRACTION_DIGITS => 2,
]

Autres formats

En plus des formats de date, temps et nombre, Yii prend aussi en charge les autres formats communément utilisés, y compris :

Valeurs nulles (null)

Les valeurs null sont formatées spécialement. Au lieu d'afficher une chaîne de caractères vide, le formateur la convertit en une chaîne de caractères prédéfinie dont la valeur par défaut est (not set) traduite dans la langue courante de l'application. Vous pouvez configurer la propriété yii\i18n\Formatter::nullDisplay pour personnaliser cette chaîne de caractères.

Localisation des formats de données

Comme nous l'avons mentionné précédemment, le formateur utilise la yii\i18n\Formatter::locale courante pour déterminer comment formater une valeur qui soit convenable dans la cible pays/région. Par exemple, la même valeur de date est formatée différemment pour différentes locales :

Yii::$app->formatter->locale = 'en-US';
echo Yii::$app->formatter->asDate('2014-01-01'); // affiche : January 1, 2014

Yii::$app->formatter->locale = 'de-DE';
echo Yii::$app->formatter->asDate('2014-01-01'); // affiche : 1. Januar 2014

Yii::$app->formatter->locale = 'ru-RU';
echo Yii::$app->formatter->asDate('2014-01-01'); // affiche : 1 января 2014 г.

Par défaut, la yii\i18n\Formatter::locale est déterminée par la valeur de yii\base\Application::language. Vous pouvez la redéfinir en définissant la propriété yii\i18n\Formatter::locale explicitement.

Note: le formateur de Yii a besoin de l'extension intl de PHP pour prendre en charge la localisation des formats de données. Parce que différentes versions de la bibliothèque ICU compilées par PHP produisent des résultats de formatage différents, il est recommandé que vous utilisiez la même version de la bibliothèque ICU pour tous vos environnements. Pour plus de détails, reportez-vous au tutoriel Configuration de votre environnement PHP pour l'internationalisation.

Si l'extension intl extension n'est pas installée, les données ne sont pas localisées.

Notez que pour les valeurs de dates qui sont antérieures à l'année 1901, ou postérieures à 2038, la localisation n'est pas faite sur les systèmes 32bits, même si l'extension intl est installée. Cela est dû au fait que, dans ce cas, ICU utilise des horodatages UNIX 32bits pour les valeurs de date.