Config.yml est le fichier de configuration principal de l’application, il permet de configurer un “environnement” et de l’utiliser.
Vous pouvez, dans ce fichier, décrire plusieurs environnements et passer de l’un à l’autre grâce à la variable “environment”
Il utilise le format YAML, très lisible et facilement compréhensible.
Ce fichier requiert deux blocs minimaux :
Dans l’exemple ci-dessous, l’environnement choisi est “dev”, et l’on trouve en dessous la déclaration de cet environnement.
#config.yml
environment: dev
dev:
phraseanet:
servername: 'http://dev.phrasea.net/'
maintenance: false
debug: true
display_errors: true
database: main_connexion
api-timers: true
template_engine: twig_debug
orm: doctrine_dev
cache: array_cache
opcodecache: array_cache
border-manager: border_manager
Détaillons la composition d’un environnement
phraseanet (configuration principale)
- servername: L’URI ou est installée l’application (requis)
- maintenance: Passer l’application en état de maintenance
- debug: Passer l’application en mode debug
- display_errors: Afficher les erreurs sur la sortie standard
- database: Nom de la connexion à la base de donnée (requis) voir connexion.yml
- api-timers: Ajout de timers de debug dans les résultats retournés par l’API
template_engine : service de mise en page (requis)
orm : Service de mapping à la base de donnée (requis)
cache : service de cache principal cache
opcodecache : service de cache opcode opcodecache
border-manager : service de douane
Les différents services sont déclarés dans le fichier service.yml.
Connexions.yml permet de déclarer et nommer des connexions vers des bases de données. La connexion est partagé par différent service (Phraseanet et ORM)
#connexions.yml
main_connexion:
host: localhost
port: 3306
user: phrasea_engine
password: s3cr3t
dbname: applicationBox
driver: pdo_mysql
charset: UTF8
Le fichier service.yml décrit des services. Ces services sont utilisables dans le fichier config.yml.
Vous trouverez un exemple de fichier de service dans config/services.sample.yml.
Quatre groupes de services sont disponibles en standard dans l’application: ORM, TemplateEngine, Log, et Cache.
Voici la structure générale d’un service :
ServiceGroupe:
ServiceName:
type: Namespace\Classe
options:
parametre1: valeur
parametre2: valeur
Un service requiert un type , qui spécifie la classe PHP à charger. Le tableau d’option est optionnel et fonction du service.
Voyons les options que vous pourrez trouver dans les principaux services de Phraseanet :
Voici le service doctrine_dev :
#services.yml
Orm:
doctrine_dev:
type: Orm\Doctrine
options:
debug: true
dbal: test_connexion
cache:
query:
service: Cache\array_cache
result:
service: Cache\array_cache
metadata:
service: Cache\array_cache
log:
service: Log\query_logger
debug : activation du debug
dbal : Nom d’une connexion déclarée dans connexions.yml
cache : paramètre des options de cache
- query : utilisation du service Cache\array_cache (voir ci dessous)
- result : utilisation du service Cache\array_cache (voir ci dessous)
- metadata : utilisation du service Cache\apc_cache (voir ci dessous)
- log : utilisation du service Log\query_logger (voir ci dessous)
Voir aussi
Pour plus d’informations sur les différents caches doctrine http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html#integrating-with-the-orm
Voici le service twig_prod
#services.yml
TemplateEngine:
twig_prod:
type: TemplateEngine\Twig
options:
debug: false
charset: utf-8
strict_variables: false
autoescape: true
optimizer: true
Voir aussi
Pour plus de détails sur les options de l’environnement twig http://twig.sensiolabs.org/doc/api.html#environment-options
Voici le service de log Doctrine Monolog. Ce service n’est utilisable que pour le log du service Doctrine.
#services.yml
Log:
query_logger:
type: Log\Doctrine\Monolog
options:
output: json
channel: query-logger
handler: rotate
max_day: 2
filename: doctrine-query.log
output : Spécification du formatage de sortie. Trois modes sont possibles.
channel : Nom du channel utilisé par le service de log. C’est une façon d’identifier à quelle partie de l’application une entrée de log est liée.
handler : Permet de spécifier le type de gestionnaire de log utilisé par le service.
- stream : Ecrire les logs dans un fichier.
- rotate : Ecrire les logs dans un fichiers qui sont renouvelés tous les jours et limiter le nombre de fichiers enregistrés.
filename: Le nom du fichier de log.
max_day : Spécifier en nombre de jour la fréquence de rotation opérée sur les fichiers de logs dans le cas ou le gestionnaire de rotation est utilisé.
#services.yml
Cache:
array_cache:
type: Cache\ArrayCache
#services.yml
Cache:
apc_cache:
type: Cache\ApcCache
#services.yml
Cache:
xcache_cache:
type: Cache\XcacheCache
#services.yml
Cache:
memcache_cache:
type: Cache\MemcacheCache
options:
host: localhost
port: 11211
Ce service a pour but d’effectuer des vérifications pour chaque fichier entrant dans Phraseanet. Si le processus de validation échoue le document sera envoyé dans la quarantaine.
Le service permet de configurer les processus de validation des fichiers à l’aide de “Checker”.
Un “Checker” permet d’ajouter une contrainte de validation au processus de validation.
Checkers disponibles :
Checker | Description | Options |
---|---|---|
CheckerSha256 | Vérifie si le fichier n’est pas un doublon En se basant sur la somme de controle “sha256” | |
CheckerUUID | Vérifie si le fichier n’est pas un doublon En se basant sur l’identifiant unique du fichier | |
CheckerDimension | Vérification sur les dimensions du fichier (* si applicable) | width : largeur du fichier height : hauteur du fichier |
CheckerExtension | Vérification sur les extensions du fichiers | extensions : les extensions de fichiers autorisées |
CheckerFilename | Vérifie si le fichier n’est pas un doublon En se basant sur son nom | sensitive : active la sensibilité à la casse |
CheckerMediaType | Vérification sur le type du fichier (Audio, Video...) | mediatypes : les types de médias authorisés |
CheckerColorspace | Vérification sur l’espace de couleur du fichier (* si applicable) | colorspaces : les types d’espace colorimétrique authorisés |
#services.yml
Border:
border_manager:
type: Border\BorderManager
options:
enabled: true
checkers:
-
type: Checker\Sha256
enabled: true
-
type: Checker\UUID
enabled: true
-
type: Checker\Colorspace
enabled: true
options:
colorspaces: [cmyk, grayscale, rgb]
-
type: Checker\Dimension
enabled: false
options:
width: 80
height: 80
-
type: Checker\Extension
enabled: false
options:
extensions: [jpg, jpeg, png, pdf, doc, mpg, mpeg, avi, flv, mp3]
-
type: Checker\Filename
enabled: true
options:
sensitive: true
-
type: Checker\MediaType
enabled: false
options:
mediatypes: [Audio, Document, Flash, Image, Video]
Il est possible de restreindre la portée d’un checker sur un ensemble de collection en fournissant une liste de base_id correspondant:
#services.yml
Border:
border_manager:
type: Border\BorderManager
options:
enabled: true
checkers:
-
type: Checker\Sha256
enabled: true
collections:
- 4
- 5
La même restriction peut être faite au niveau des databoxes :
#services.yml
Border:
border_manager:
type: Border\BorderManager
options:
enabled: true
checkers:
-
type: Checker\Sha256
enabled: true
databoxes:
- 3
- 7
Note
Il n’est pas possible de restreindre à la fois sur des databoxes et des collections.
Comment implémenter un checker ?
Tous les checkers étant déclarés dans le namespace Alchemy\Phrasea\Border\Checker, il suffit de créer un nouvel objet dans ce namespace. Cet objet doit implémenter l’interface Alchemy\Phrasea\Border\Checker\Checker
Par exemple : Créons un checker qui filtre les documents sur leur données GPS.
<?php
//Dans lib/Alchemy/Phrasea/Border/Checker/NorthPole.php
namespace Alchemy/Phrasea/Border/Checker;
use Alchemy\Phrasea\Border\File;
use Doctrine\ORM\EntityManager;
class NorthPole implements Checker
{
//Option bar
protected $bar;
//Gestion des options
public function __construct(Array $options)
{
if( ! isset($options['bar']) {
throw new \InvalidArgumentException('Missing bar option');
}
$this->bar = $options['bar'];
}
//Contrainte de validation, doit retourner un booleen
public function check(EntityManager $em, File $file)
{
$media = $file->getMedia();
if ( null !== $latitude = $media->getLatitude()
&& null !== $ref = $media->getLatitudeRef()) {
if($latitude > 60
&& $ref == MediaVorus\Media\DefaultMedia::GPSREF_LATITUDE_NORTH) {
return true;
}
}
return false;
}
}
Puis dans le fichier de configuration services.yml
#Dans le service Border
-
type: Checker\NorthPole
enabled: true
options:
bar: foo
Les valeurs suggérées sont des aides à la saisie que vous pouvez régler et que vous retrouverez lors de l’editing
Logo de la collection
Le Fichier de filigrane ou watermark s’applique sur les documents en prévisualisation.
Le Stamp est un logo ajouté au document et pouvant être associé à la description de celui-ci.
Pour utiliser cette option :
<?xml version="1.0" encoding="UTF-8"?>
<baseprefs>
/**
* ....
*/
<stamp>
<logo position="left" width="25%"/>
<text size="50%">Titre: <field name="SujetTitre"/></text>
<text size="50%">Legende: <field name="Legende"/></text>
<text size="50%">Copyright: <field name="Copyright"/></text>
<text size="50%">Date : <field name="Date"/></text>
</stamp>
</baseprefs>