Aller au contenu

Le formulaire

tilttek/accessible-dice
{{ accessible_dice(path('table_roll', {table: table.id}), token: {name: '_token', value: csrf_token('roll')}, result: result, name: app.user.displayName) }}

accessible_dice(action, field, token, result, name, politeness, id, locale) dessine le formulaire :

ArgumentValeur par défautCe qu'il règle
actionL'endroit où le formulaire est envoyé, par POST
fielddiceLe nom sous lequel le choix est envoyé
tokennullUn champ caché que l'application vérifie, tel que son jeton CSRF : {name, value}
resultnullLe jet dont le formulaire a été répondu, un PoolResult, annoncé au chargement de la page
namenullLe nom du lanceur, dit avant ce jet
politenessla configurationpolite ou assertive
idtilttek-accessible-diceCe par quoi commencent les identifiants du formulaire : distinct pour chaque formulaire d'une page
localecelle de la requêteLa langue des mots et des libellés

Le choix envoyé

Le formulaire envoie le choix, pas une expression : dice[die] — d6, ou le nom d'un dé personnalisé —, dice[count] et dice[modifier]. Le serveur construit l'expression à partir de lui, de sorte que le formulaire lance de la même façon avec ou sans son script, et que rien d'autre ne peut être lancé par lui :

use Tilttek\AccessibleDice\Application\AccessibleDice;
use Tilttek\AccessibleDice\Application\Exception\InvalidChoice;
use Tilttek\DiceBundle\Application\DiceRolls;

public function roll(Request $request, AccessibleDice $dice, DiceRolls $rolls): Response
{
    try {
        $result = $rolls->roll($dice->expression($request->request->all('dice')));
    } catch (InvalidChoice) {
        throw new BadRequestHttpException();
    }

    return $this->render('roll.html.twig', ['result' => $result]);
}

expression() accepte un dé que la configuration offre, un nombre de 1 jusqu'à la limite de dés et un modificateur de -1000 à 1000, en nombres entiers ou en leur texte, et lève InvalidChoice pour tout le reste. Avec une tour de dés, lancez plutôt dans la tour de la table : $tower->roll($table, $dice->expression(...), $member).

Annoncer le résultat

La phrase nomme chaque dé — la face d'un dé personnalisé par son libellé —, dit un dé qui n'a pas compté, puis le total ou ce que le jet a donné : Aelis rolled. 2d6+1: 4, 3. Total 8. Le formulaire annonce le result qu'on lui donne ; accessible_dice_announcement(result, name) donne la même phrase ailleurs, et RollAnnouncer en PHP.

Les faces d'un dé personnalisé

{% for face in accessible_dice_faces('coin') %}
    <p>{{ face.description }}</p> {# Heads: a circle, worth 1 #}
{% endfor %}

Avec une tour de dés

Le contrôleur écoute tilttek--dice-tower--tower:drop sur la fenêtre : chaque jet d'une tour de dés sur la même page est annoncé dans la région dynamique du formulaire, ses faces nommées par les libellés du formulaire, son lanceur par le nom que la page de la tour donne. Dessinez la tour avec announce: false, afin que chaque jet soit annoncé une seule fois :

{{ dice_tower(table, names, announce: false) }}
{{ accessible_dice(path('table_roll', {table: table.id})) }}