Comment restreindre la saisie d'un Smart Field

Prérequis

Afin de pouvoir suivre ce guide, il faut préalablement avoir généré et paramétré le(s) fichier(s) de configuration de notre/nos formulaire(s).

Cela nous assure que les fichiers .php de rendu associés aux Smart Structures concernées sont bien générés.

Comment procéder ?

Recommandation

Si vous n'êtes pas familier avec les Contraintes et leur fonctionnement, il est fortement recommandé de lire la documentation associée diponible ici

Les menus de notre Restaurant sont caractérisés par diverses informations dont une remise exprimé en %.

Cette remise est donc comprise entre 0 et 100%. Il nous faut donc verrouiller le champ associé afin qu'on ne puisse pas sortir de cette plage de valeurs. Pour cela, deux étapes :

  • Créer un fichier php de contrainte pour les menus : src/vendor/<vendorName>/<moduleName>/SmartStructures/Menu/Utils/Menu.php
<?php

namespace Cogip\Restauratec\SmartStructures\Menu\Utils;

class Menu
{
  /**
   * Vérifie que la remise est bien comprise entre 0 et 100.
   * Une méthode de contrainte doit retourner null, chaîne vide "" ou true pour indiquer que la contrainte est respectée.
   * La méthode retourne une chaîne de caractères non vide pour indiquer la raison de l'échec.
   * La méthode peut retourner false pour mettre en échec sans donner de raison.
   */
  public static function checkDiscountValue($discount): string
  {
    if ($discount) {
      if ($discount < 0 || $discount > 100) {
        return "La remise doit être comprise entre 0 et 100";
      }
    }
    return "";
  }
}
  • Déclarer une contrainte pour le SmartField voulu. Dans le contexte du restaurant, c'est le champs menu_discount qui est concerné. Rendons-nous donc dans le fichier de configuration de la SmartStructure Menu : 100-MenuStructure.xml


















 
 
 
 
 
 





<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
    <smart:structure-configuration name="MENU" label="Menu">
        <smart:icon file="menu.png"/>
        <smart:class>Cogip\Restauratec\SmartStructures\Menu\MenuBehavior</smart:class>
        <smart:fields>
            <smart:field-set name="menu_frame" type="frame" access="ReadWrite" label="Informations relatives au menu">
                <smart:field-text name="menu_title" is-title="true" access="ReadWrite" label="Libellé"/>
                <smart:field-htmltext name="menu_description" access="ReadWrite" label="Description"/>
                <smart:field-set name="menu_composition" type="array" access="ReadWrite" label="Composition du menu">
                    <smart:field-docid access="ReadWrite" name="menu_plat" label="Plat" relation="PLAT"/>
                    <smart:field-docid access="ReadWrite" name="menu_boisson" label="Boisson" relation="BOISSON"/>
                </smart:field-set>
                <smart:field-double name="menu_discount" access="ReadWrite" label="Remise applicable (%)"/>
                <smart:field-money name="menu_price" access="Read" label="Prix (€)"/>
            </smart:field-set>
        </smart:fields>
        <smart:hooks>
            <!-- Ajoute une contrainte sur le champs `menu_discount` avant l'enregistrement du formulaire -->
            <smart:field-hook type="constraint" event="onPreStore" field="menu_discount">
                <smart:field-callable function="Cogip\Restauratec\SmartStructures\Menu\Utils\Menu::checkDiscountValue"/>
                <smart:field-argument type="field">menu_discount</smart:field-argument>
            </smart:field-hook>
        </smart:hooks>
        <smart:autocompletion/>
        <smart:defaults/>
    </smart:structure-configuration>
</smart:config>

Attention

Pensez à effectuer une réinstallation afin que l'application prenne en compte les modifications effectuées :

npx @anakeen/anakeen-cli deploy -c http://localhost:8080/control -s . -u admin -p anakeen --reinstall

Résultat / Vérification

Une fois le code déployé, lors de la création ou de la modification d'un menu, si l'on saisit une valeur invalide, le formulaire nous l'indique et bloque l'enregistrement.

Accéder à la page de création de menu

Afin d'accéder au formulaire de création de menu, rendons-nous dans le Development Center, partie Smart Structure, chercher et sélectionner Menu et cliquer sur le bouton créer ou alors y accéder via le lien ci-dessous :

http://localhost:8080/api/v2/smart-elements/MENU/views/!defaultCreation.html

Page de connexion

Et ensuite ?

Comment gérer les rendus d'un Smart Element