app issueshttps://git.unicaen.fr/lib/unicaen/app/-/issues2019-09-11T16:42:08+02:00https://git.unicaen.fr/lib/unicaen/app/-/issues/4SearchAndSelect ajouter une clef 'class'2019-09-11T16:42:08+02:00Jean-Philippe MetivierSearchAndSelect ajouter une clef 'class'Actuellement on a les clefs :
- id,
- label,
- extra.
'class' permettrait d'indiqué une source, un type d'objet, et plus encore.
sans affichage associé car géré ensuite via CSSActuellement on a les clefs :
- id,
- label,
- extra.
'class' permettrait d'indiqué une source, un type d'objet, et plus encore.
sans affichage associé car géré ensuite via CSShttps://git.unicaen.fr/lib/unicaen/app/-/issues/3FormViewHelper - FormControlGroup - Utilisation approfondie des ViewHelpers2019-07-24T16:57:38+02:00Florentin L'HommeFormViewHelper - FormControlGroup - Utilisation approfondie des ViewHelpers*Idéalement, répondre d'abord à l'Issue #1 afin de gérer les Fieldsets et, sans doute, rediriger tous ses sous-éléments vers le View Helper [FormControlGroup](../blob/zf-3.x/src/UnicaenApp/Form/View/Helper/FormControlGroup.php). Actuelle...*Idéalement, répondre d'abord à l'Issue #1 afin de gérer les Fieldsets et, sans doute, rediriger tous ses sous-éléments vers le View Helper [FormControlGroup](../blob/zf-3.x/src/UnicaenApp/Form/View/Helper/FormControlGroup.php). Actuellement, l'ensemble des (sous-)éléments d'un Fieldset sont ignorés aux yeux du [FormControlGroup](../blob/zf-3.x/src/UnicaenApp/Form/View/Helper/FormControlGroup.php), l'utilisation de ViewHelpers comme décrit ci-dessous sera donc inefficace sur ces éléments.*
Dans l'aide de vue [FormControlGroup](../blob/zf-3.x/src/UnicaenApp/Form/View/Helper/FormControlGroup.php), il y a un bon début d'idée qui est de permettre l'utilisation de ViewHelpers tout en utilisant l'aide de vue `$this->form($formulaireZend)` (cf. l'attribut `$helpers` de [FormControlGroup](../blob/zf-3.x/src/UnicaenApp/Form/View/Helper/FormControlGroup.php)).
Malheureusement, rien ne semble réellement prévu pour "ajouter facilement" des ViewHelpers. En l'état actuel, pour se faire, il semblerait qu'il faille passer par tout un processus d'héritage du [FormControlGroup](../blob/zf-3.x/src/UnicaenApp/Form/View/Helper/FormControlGroup.php) puis du [Form](../blob/zf-3.x/src/UnicaenApp/Form/View/Helper/Form.php) (etc) simplement pour ajouter un ou plusieurs ViewHelper(s). Pourquoi ne pas simplement passer par des éléments de config ?
# Proposition d'ajout / modification
## 1. Dans le fichier [FormControlGroup](../blob/zf-3.x/src/UnicaenApp/Form/View/Helper/FormControlGroup.php)
* Ajouter un getter et un setter à l'attribut `$helpers`
```php
/**
* @return string[]
*/
public function getHelpers()
{
return $this->helpers;
}
/**
* @param string[] $helpers
*/
public function setHelpers($helpers)
{
$this->helpers = $helpers;
}
```
* EDIT : Modifications pour garder la priorité de l'attribut `$pluginClass` du `render`
```php
/* DEBUT MODIFICATION */
public function render(ElementInterface $element, $pluginClass = null)
{
$this->normalizeElement($element);
$this->customFromOptions($element);
/* Bypass pour des éléments spécifiques */
$class = get_class($element);
if ($pluginClass === null && array_key_exists($class, $this->helpers)) {
$helper = $this->getView()->plugin($this->helpers[$class]);
return $helper($element);
}
if ($pluginClass === null) $pluginClass = 'formElement';
$inputGroup = [];
if ($this->getPrefix()) {
$inputGroup[] = $this->prefixHtml($element);
}
/* FIN MODIFICATION */
/* ... */
}
```
## 2. Dans le fichier [FormControlGroupFactory](../blob/zf-3.x/src/UnicaenApp/Form/View/Helper/FormControlGroupFactory.php)
* Récupération des éléments de configuration permettant la complétion de ce tableau `$helpers`
```php
public function __invoke(ContainerInterface $container, $requestedName, $options = null)
{
$vh = new FormControlGroup();
$config = $container->get('config');
$configHelpers = [];
if (isset($config['unicaen-app']) && isset($config['unicaen-app']['form_view_helpers'])) $configHelpers = $config['unicaen-app']['form_view_helpers'];
$helpers = array_merge($vh->getHelpers(), $configHelpers);
$vh->setHelpers($helpers);
return $vh;
}
```
## 3. Dans un fichier de configuration
* Dans le fichier de configuration dédié à UnicaenApp, ajouter la clé 'form_view_helpers' contenant les associations 'key'=>'value' avec 'key' la classe de l'entité surlaquelle on souhaite appliquer un ViewHelper et 'value' la classe du ViewHelper correspondant ou bien la clé (ou alias) permettant de la récupérer dans la clé 'view_helpers' de la configuration générale.
```php
return [
/*(...)*/
'unicaen-app' => [
/*(...)*/
'form_view_helpers' => [
Entity1::class => 'aliasEntity1',
Entity2::class => Entity1ViewHelper::class,
],
/*(...)*/
],
/*(...)*/
];
```
**Note :**
Pourquoi ajouter une nouvelle clé 'form_view_helpers' plutôt qu'utiliser les ViewHelpers défini dans la clé 'view_helpers' ?
Lorsque l'on utilise l'aide de vue [Form](../blob/zf-3.x/src/UnicaenApp/Form/View/Helper/Form.php), via l'instruction `$this->form($formulaire)`, on ne souhaite pas forcément utiliser toutes les aides de vue déclarées dans cette clé.
Cela permet donc de vraiment préciser quels ViewHelpers peuvent être utilisés dans l'aide de vue [Form](../blob/zf-3.x/src/UnicaenApp/Form/View/Helper/Form.php). Notons qu'il est possible d'utiliser, dans la clé 'form_view_helpers', les alias définis dans 'view_helpers' permettant donc de généraliser/abstraire l'utilisation d'un ViewHelper.
Notons aussi que l'ajout d'une nouvelle clé 'form_view_helpers' permettra la mise à jour d'UnicaenApp de façon transparente, sans risque de subir de nouveaux comportements non désirés (à moins, justement, d'utiliser cette nouvelle clé).https://git.unicaen.fr/lib/unicaen/app/-/issues/1Différence de structuration des éléments dans un Fieldset2019-07-23T16:45:45+02:00Florentin L'HommeDifférence de structuration des éléments dans un FieldsetL'aide de vue d'UnicaenApp pour les formulaires (cf. [Form.php](../blob/master/src/UnicaenApp/Form/View/Helper/Form.php)) structure habituellement les éléments de la manière suivante :
```html
<div class="form-group">
<label class="cont...L'aide de vue d'UnicaenApp pour les formulaires (cf. [Form.php](../blob/master/src/UnicaenApp/Form/View/Helper/Form.php)) structure habituellement les éléments de la manière suivante :
```html
<div class="form-group">
<label class="control-label" for="mon_select">Mon select</label>
<select class="form-control" name="mon_select">
<option value="">Empty option</option>
<option value="opt1">Option 1</option>
<option value="opt2">Option 2</option>
</select>
</div>
```
Or lorsqu'un élément Fieldset est utilisé, l'aide de vue délégue directement la tâche à une aide de vue de Zend <sub><sup>( \Zend\Form\View\Helper\FormCollection )</sup></sub> ce qui donne alors la structuration suivante :
```html
<label>
<span>Mon select</span>
<select name="mon_select">
<option value="">Empty option</option>
<option value="opt1">Option 1</option>
<option value="opt2">Option 2</option>
</select>
</label>
```
Ceci n'a pas d'incidence sur le traitement des données. Néanmoins elle en a sur la présentation des champs ce qui oblige, en l'état actuel, à rajouter des éléments de style pour calquer au mieux les champs manipulés par l'aide de vue UnicaenApp.
L'affichage par défaut devrait être le même, que ce soit un élément appartenant à un Fieldset ou non. Pour cela, les Fieldsets doivent aussi être traités dans UnicaenApp. Si l'envie est de présenter les champs d'un Fieldset un peu différement, cela devrait nécessiter l'application du style souhaité avec un sélecteur tel que ```fieldset div.form-group {...}```.