Aller au contenu

Configuration

phil/ujo-bundle
# config/packages/phil_ujo.yaml
phil_ujo:
    allow_raw: false        # whether documents may hold raw HTML blocks
    max_bytes: 4194304      # the largest UJO JSON read, in bytes
    max_depth: 8            # the deepest nesting of blocks inside blocks
    max_blocks: 10000       # the most blocks a document may hold, nested ones included
    max_html_length: 100000 # the longest HTML field, in characters
    max_raw_length: 50000   # the longest HTML of a raw block, in characters
OptionValeur par défautEffet
allow_rawfalsetrue ajoute le type raw au registre : son HTML est assaini avec le profil raw. Ne l'acceptez que de rédacteurs à qui vous confiez la structure des pages
max_bytes4194304Un JSON plus gros est refusé avant l'analyse. Au moins 1
max_depth8Les blocs imbriqués plus profondément sont refusés. Au moins 1
max_blocks10000Un document de plus de blocs, blocs imbriqués compris, est refusé. Au moins 1
max_html_length100000Un champ HTML plus long, en caractères, est refusé avant son assainissement. Au moins 1
max_raw_length50000La même chose pour le HTML d'un bloc raw. Au moins 1

Les limites de blocs et de longueur bornent ce que coûte l'affichage d'un document : son HTML est assaini de nouveau à chaque rendu, par ujo_html comme par Ujo::toHtml().

Services

ServiceConstruit comme
Phil\Ujo\Type\BlockTypeRegistryBlockTypeRegistry::default(), avec StandardTypes::raw() quand allow_raw est vrai
Phil\Ujo\Normalizersur ce registre, les réglages et l'assainisseur par défaut, max_depth, max_blocks, max_html_length et max_raw_length
Phil\Ujo\Html\HtmlRendererHtmlRenderer::default()
Phil\Ujo\Text\PlainTextavec les conversions par défaut
Phil\Ujo\Json\JsonDecoderavec max_bytes
Phil\Ujo\Ujosur les quatre ci-dessus ; public

Les registres et les moteurs de rendu sont des valeurs immuables. Pour ajouter un type, un réglage, un moteur de rendu ou une conversion, construisez la valeur dont l'application a besoin dans une fabrique à elle et déclarez cette fabrique pour le service :

// src/Ujo/UjoFactory.php
final class UjoFactory
{
    public static function types(): BlockTypeRegistry
    {
        return BlockTypeRegistry::default()->with(CalloutType::create());
    }

    public static function renderer(): HtmlRenderer
    {
        return HtmlRenderer::default()->with('callout', new CalloutRenderer());
    }
}
# config/services.yaml
services:
    Phil\Ujo\Type\BlockTypeRegistry:
        factory: ['App\Ujo\UjoFactory', 'types']
    Phil\Ujo\Html\HtmlRenderer:
        factory: ['App\Ujo\UjoFactory', 'renderer']

Les autres services, Ujo en premier, prennent par référence ceux qui sont redéfinis.