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
disponible 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" needed="true" 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>
<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: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 ou alors y accéder via le
lien ci-dessous :
http://localhost:8080/api/v2/smart-elements/MENU/views/!defaultCreation.html