Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2022-11-26T20:08:25+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Validation officielle et partielle durant la béta, message #2471152022-11-26T20:08:25+01:00Gil Cot/@Gil%20Cothttps://zestedesavoir.com/forums/sujet/10498/validation-officielle-et-partielle-durant-la-beta/?page=1#p247115<p>Salut tout le monde,</p>
<p>J’ai eu un peu de mal à trouver ce sujet. Reste à savoir maintenant si c’est toujours d’actualité (ou sinon être pointé vers la page qui va bien.) </p>
<p>Édition 6h plus tard : je viens de trouver <a href="https://zestedesavoir.com/tutoriels/705/le-guide-du-contributeur/828_contribuer-au-contenu/les-phases-de-correction-et-de-validation/">la bonne page</a>. Désolé pour le bruit. </p>Validation d'une licence, niveau bac+4, message #2009412019-03-27T09:01:34+01:00Drakop/@Drakophttps://zestedesavoir.com/forums/sujet/12267/validation-dune-licence-niveau-bac4/?page=1#p200941<p>Bonjour merci pour vos réponses,</p>
<p>En fait c’est plutôt sur la validation de la licence ou d’une partie de la licence que porte ma question, avec les crédits que j’ai déjà validé avec mon école et mon bac +2, si je peux par exemple valider une licence si les enseignements que j’ai eu à mon école correspondent à ceux de la licence.</p>
<p>Oui en effet une grosse partie des UV correspondent ! </p>Validation d'une licence, niveau bac+4, message #2008892019-03-26T13:11:46+01:00ache/@achehttps://zestedesavoir.com/forums/sujet/12267/validation-dune-licence-niveau-bac4/?page=1#p200889<p>As-tu validé une partie de la licence ?</p>Validation d'une licence, niveau bac+4, message #2008882019-03-26T13:07:49+01:00Aabu/@Aabuhttps://zestedesavoir.com/forums/sujet/12267/validation-dune-licence-niveau-bac4/?page=1#p200888<p>Salut,</p>
<p>Ça dépend. Il faut demander au service de ton école approprié. Pourquoi tu veux avoir ça ? </p>
<p>Dans mon établissement, certains élèves se dont vu délivrer des attestations d’équivalence pour des candidatures dans des établissements étrangers.</p>
<p>Autrement, je ne pense pas qu’il soit possible d’avoir un vrai diplôme si l’établissement n’est pas habilité à le délivrer, au mieux une attestation qui peut faciliter les transferts vers d’autres établissements. </p>Validation d'une licence, niveau bac+4, message #2008822019-03-26T11:08:51+01:00Drakop/@Drakophttps://zestedesavoir.com/forums/sujet/12267/validation-dune-licence-niveau-bac4/?page=1#p200882<p>Bonjour,</p>
<p>Je suis actuellement en école d’ingénieurs en bac+4 (apprentissage) et j’aimerais savoir si c’était possible d’avoir une validation d’une licence avec les acquis que j’ai obtenu avec l’école ?</p>
<p>Merci d’avance,</p>Les parties "a ne pas valider" sont affiche dans la beta, message #1856152018-08-06T01:06:25+02:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/10998/les-parties-a-ne-pas-valider-sont-affiche-dans-la-beta/?page=1#p185615<p>Salut,</p>
<p>Je voulais revenir sur ce topic. Je fais peut-être partie de la minorité, mais je trouve que le comportement actuel est bien. Dans la plupart de mes tutoriels, je veux des parties en bêta mais pas validées quand je fais valider des corrections ou des améliorations sur les parties qui sont à valider.</p>Les parties "a ne pas valider" sont affiche dans la beta, message #1840262018-07-17T12:26:22+02:00Narann/@Narannhttps://zestedesavoir.com/forums/sujet/10998/les-parties-a-ne-pas-valider-sont-affiche-dans-la-beta/?page=1#p184026<p><img src="https://78.media.tumblr.com/31598b8ad52218996a14cef41a0bbb16/tumblr_inline_ofrnc6u2PI1s9x8us_500.gif" alt="D'accord ! Faisons comme ça !"></p>Les parties "a ne pas valider" sont affiche dans la beta, message #1840012018-07-17T10:21:37+02:00artragis/@artragishttps://zestedesavoir.com/forums/sujet/10998/les-parties-a-ne-pas-valider-sont-affiche-dans-la-beta/?page=1#p184001<p>Autant je suis en accord avec cette suggestion, autant je peux déjà te dire que si ça arrive un jour c’est "pas avant longtemps" : pour la gestion des parties "à ne pas valider" on a fait quelque chose de simple, et ne pas afficher les parties dans les affichages "privés" est un peu plus complexe (bien que tout à fait réalisable).</p>
<p>Du coup, je préfère que pour l’instant on en reste avec l’avertissement et que le jour où des fonctionnalités importantes ne seront plus en développement on se mette à développer celle-là.</p>Les parties "a ne pas valider" sont affiche dans la beta, message #1839992018-07-17T09:25:03+02:00Narann/@Narannhttps://zestedesavoir.com/forums/sujet/10998/les-parties-a-ne-pas-valider-sont-affiche-dans-la-beta/?page=1#p183999<p>Pour une raison que j’ignore, il semblerait que les parties marquées comme « à ne pas valider » soient affichées dans la Beta. Est-ce normal ?</p>
<p><a href="https://zestedesavoir.com/contenus/beta/947/utiliser-python-dans-autodesk-maya/">https://zestedesavoir.com/contenus/beta/947/utiliser-python-dans-autodesk-maya/</a></p>
<p>Ne serait-il pas plus pertinent de n’afficher en beta uniquement les parties marque comme « à valider ».</p>Validation officielle et partielle durant la béta, message #1767932018-04-01T19:31:42+02:00qwerty/@qwertyhttps://zestedesavoir.com/forums/sujet/10498/validation-officielle-et-partielle-durant-la-beta/?page=1#p176793<p>Pour moi il doit être primordiale qu’il y ai pour une première validation :</p>
<p>Une intro, conclusion et une partie de rédigée au minimum (avec tout les critères).</p>
<p>Puis une validation « par partie » (ou plusieurs parties selon la rédaction).</p>Validation officielle et partielle durant la béta, message #1767912018-04-01T19:14:10+02:00Gabbro/@Gabbrohttps://zestedesavoir.com/forums/sujet/10498/validation-officielle-et-partielle-durant-la-beta/?page=1#p176791<p>Bah, je propose qu’un validateur de l’équipe prenne le contenu en charge au fur et à mesure durant la béta en parallèle des relectures de non validateurs. On garde une validation officielle par un validateur de l’équipe sans différence avec aujourd’hui.</p>
<p>À quoi penses-tu ?</p>Validation officielle et partielle durant la béta, message #1767902018-04-01T19:01:49+02:00qwerty/@qwertyhttps://zestedesavoir.com/forums/sujet/10498/validation-officielle-et-partielle-durant-la-beta/?page=1#p176790<p>Faut voir les modalités pour garder la rigueur nécessaire au contenu de qualité <img alt=":-)" src="/static/smileys/smile.png"></p>Validation officielle et partielle durant la béta, message #1767892018-04-01T18:01:15+02:00Situphen/@Situphenhttps://zestedesavoir.com/forums/sujet/10498/validation-officielle-et-partielle-durant-la-beta/?page=1#p176789<p>C’est artragis qu’il faut remercier <img alt=":)" src="/static/smileys/smile.png"></p>Validation officielle et partielle durant la béta, message #1767882018-04-01T17:53:00+02:00Gabbro/@Gabbrohttps://zestedesavoir.com/forums/sujet/10498/validation-officielle-et-partielle-durant-la-beta/?page=1#p176788<p>Yep, je sais. Je propose un moyen (il y en a d’autres) d’exploiter cette très intéressante fonctionnalité. <img alt=";)" src="/static/smileys/clin.png"></p>
<p>Merci beaucoup, au passage. Ça va nous simplifier la vie pour les big tutos.</p>Validation officielle et partielle durant la béta, message #1767872018-04-01T17:51:30+02:00Situphen/@Situphenhttps://zestedesavoir.com/forums/sujet/10498/validation-officielle-et-partielle-durant-la-beta/?page=1#p176787<p>Ça tombe bien, la publication partielle arrive avec la prochaine version ! Donc techniquement ce sera possible, il ne restera plus que les validateurs décident du fonctionnement et des règles.</p>Validation officielle et partielle durant la béta, message #1767862018-04-01T17:49:00+02:00Gabbro/@Gabbrohttps://zestedesavoir.com/forums/sujet/10498/validation-officielle-et-partielle-durant-la-beta/?page=1#p176786<p>Bonjour,</p>
<p>Pour rappel, les tutoriels et articles sont sur ZdS validés avant publication. le chemin est donc le suivant :</p>
<ul>
<li>Rédaction ;</li>
<li>Béta et rerédaction ;</li>
<li>Validation et rererédaction ;</li>
<li>Publication.</li>
</ul>
<p>Cela peut être long, en particulier pour les plus gros tutos.</p>
<p>Je propose, un peu à l’image de ce que tente InformaticienZéro sur son tuto C++, une validation officielle et partielle durant la béta : un validateur pourrait, durant une béta, proposer à un auteur de relire les parties terminées. Si celles-ci se tiennent, une publication pourrait suivre.</p>
<p>Avantage : le cycle écriture <-> retour serait raccourci, ce qui devrait aider en motivation pour les auteurs. Pour les validateurs, ça éviterait de se retrouver avec un énorme contenu à valider d’un coup, et les relecteurs de la béta pourraient se concentrer sur les parties nouvellement écrites, les premières étant figées. Cela irait dans le sens de béta mieux ciblées, et d’un meilleur suivi. Cela devrait aussi encourager les validations partielles.</p>
<p>Inconvénient : on peut craindre que certain relecteur délaissent le contenu si un validateur s’en occupe (bien que leur rôle ne soit pas identiques : le relecteur fait toujours du « défrichage » avec ma proposition), et en cas d’arrêt de l’écriture, le temps passé en validation est perdu.</p>
<p>Actuellement, rien n’interdit en théorie cela, mais ce n’est clairement pas la norme et ce n’est pas considéré comme une validation partielle officielle.</p>
<p>Sur ce, qu’en pensez-vous ?</p>Validation spécifique qui me pose une colle, message #1723182018-01-22T12:26:56+01:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/10144/validation-specifique-qui-me-pose-une-colle/?page=1#p172318<p>Je rouvre le sujet parce que je m’y perds encore. Je pensais avoir une idée du souci, mais visiblement non.</p>
<div class="custom-block custom-block-question"><div class="custom-block-body"><p>tl;dr : qu’est-ce qui peut faire que les contraintes d’annotations ne sont pas lues ?</p></div></div>
<div class="custom-block custom-block-information"><div class="custom-block-body"><p>Avec Symfony 2.8.28 au moins, les groupes de validation peuvent être différents pour la validation définie dans le formulaire et celle dans l’entité en cas d’entités embarquées. Donc groupe <code>Default</code> pour les annotations, mais le groupe défini dans la classe de formulaire pour celles qui y sont définies.</p></div></div>
<p>Je vous fournis mon formulaire actuel ainsi que les annotations de l’entité.</p>
<div class="custom-block custom-block-spoiler"><div class="custom-block-body"><figure><div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-php"><span class="hljs-meta"><?php</span>
<span class="hljs-keyword">namespace</span> <span class="hljs-title">A</span>\<span class="hljs-title">WebBundle</span>\<span class="hljs-title">Entity</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Doctrine</span>\<span class="hljs-title">ORM</span>\<span class="hljs-title">Mapping</span> <span class="hljs-title">as</span> <span class="hljs-title">ORM</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Gedmo</span>\<span class="hljs-title">Mapping</span>\<span class="hljs-title">Annotation</span> <span class="hljs-title">as</span> <span class="hljs-title">Gedmo</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">HttpFoundation</span>\<span class="hljs-title">File</span>\<span class="hljs-title">File</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Validator</span>\<span class="hljs-title">Constraints</span> <span class="hljs-title">as</span> <span class="hljs-title">Assert</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Vich</span>\<span class="hljs-title">UploaderBundle</span>\<span class="hljs-title">Mapping</span>\<span class="hljs-title">Annotation</span> <span class="hljs-title">as</span> <span class="hljs-title">Vich</span>;
<span class="hljs-comment">/**
* Identity
*
* <span class="hljs-doctag">@ORM</span>\Table()
* <span class="hljs-doctag">@ORM</span>\Entity(repositoryClass="A\WebBundle\Repository\IdentityRepository")
*
* <span class="hljs-doctag">@Vich</span>\Uploadable
*/</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Identity</span>
</span>{
<span class="hljs-keyword">const</span> STATE_PENDING = <span class="hljs-string">'pending'</span>;
<span class="hljs-keyword">const</span> STATE_VALIDATED = <span class="hljs-string">'validated'</span>;
<span class="hljs-keyword">const</span> STATE_REJECTED = <span class="hljs-string">'rejected'</span>;
<span class="hljs-keyword">const</span> STATE_ARCHIVED = <span class="hljs-string">'archived'</span>;
<span class="hljs-keyword">const</span> STATE_EXPIRED = <span class="hljs-string">'expired'</span>;
<span class="hljs-comment">/**
* <span class="hljs-doctag">@var</span> integer
*
* <span class="hljs-doctag">@ORM</span>\Column(name="id", type="integer")
* <span class="hljs-doctag">@ORM</span>\Id
* <span class="hljs-doctag">@ORM</span>\GeneratedValue(strategy="AUTO")
*/</span>
<span class="hljs-keyword">private</span> $id;
<span class="hljs-comment">/**
* Identity number
* <span class="hljs-doctag">@var</span> string
*
* <span class="hljs-doctag">@Assert</span>\NotBlank(groups={"create", "edit"})
*
* <span class="hljs-doctag">@ORM</span>\Column(type="string", length=255, nullable=true)
*/</span>
<span class="hljs-keyword">private</span> $number;
<span class="hljs-comment">/**
* Password Nationality (not only limited to cio countries)
*
* <span class="hljs-doctag">@var</span> string
*
* <span class="hljs-doctag">@Assert</span>\NotBlank(groups={"create", "edit"})
*
* <span class="hljs-doctag">@ORM</span>\Column(type="string", length=2, nullable=true)
*/</span>
<span class="hljs-keyword">private</span> $nationality;
<span class="hljs-comment">/**
* <span class="hljs-doctag">@var</span> string
*
* <span class="hljs-doctag">@ORM</span>\Column(name="filename", type="string", length=255)
*/</span>
<span class="hljs-keyword">private</span> $filename;
<span class="hljs-comment">/**
* <span class="hljs-doctag">@var</span> File
*
* <span class="hljs-doctag">@Assert</span>\File(maxSize="10M", mimeTypes={"image/jpeg", "image/png", "application/pdf"}, groups={"create", "createEmpty", "edit", "editEmpty"})
* <span class="hljs-doctag">@Assert</span>\NotBlank(groups={"create", "createEmpty"})
*
* <span class="hljs-doctag">@Vich</span>\UploadableField(mapping="person_identity", fileNameProperty="filename")
*/</span>
<span class="hljs-keyword">private</span> $file;
<span class="hljs-comment">/**
* <span class="hljs-doctag">@var</span> \DateTime
*
* <span class="hljs-doctag">@Assert</span>\NotBlank(groups={"create", "edit"})
*
* <span class="hljs-doctag">@ORM</span>\Column(name="expiry_date", type="datetime", nullable=true)
*/</span>
<span class="hljs-keyword">private</span> $expiryDate;
<span class="hljs-comment">/**
* <span class="hljs-doctag">@var</span> string
*
* <span class="hljs-doctag">@ORM</span>\Column(name="validation_state", type="string", length=255)
*/</span>
<span class="hljs-keyword">private</span> $validationState = <span class="hljs-keyword">self</span>::STATE_PENDING;
<span class="hljs-comment">/**
* <span class="hljs-doctag">@var</span> string
*
* <span class="hljs-doctag">@ORM</span>\Column(type="text", nullable=true)
*/</span>
<span class="hljs-keyword">private</span> $rejectionReason;
<span class="hljs-comment">/**
* <span class="hljs-doctag">@var</span> \DateTime
*
* <span class="hljs-doctag">@ORM</span>\Column(name="validated_at", type="datetime", nullable=true)
*/</span>
<span class="hljs-keyword">private</span> $validatedAt;
<span class="hljs-comment">/**
* <span class="hljs-doctag">@var</span> \DateTime
*
* <span class="hljs-doctag">@ORM</span>\Column(name="rejected_at", type="datetime", nullable=true)
*/</span>
<span class="hljs-keyword">private</span> $rejectedAt;
<span class="hljs-comment">/**
* <span class="hljs-doctag">@var</span> Person
*
* <span class="hljs-doctag">@ORM</span>\ManyToOne(targetEntity="Person", inversedBy="identities", fetch="EAGER")
*/</span>
<span class="hljs-keyword">private</span> $person;
<span class="hljs-comment">/* Les accesseurs et mutateurs ne me semblent pas nécessaires, ils sont "standard",
* pas de manipulations particulières
}
</span></code></pre></div><figcaption>Identity.php</figcaption></figure></div></div>
<div class="custom-block custom-block-spoiler"><div class="custom-block-body"><figure><div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-php"><span class="hljs-meta"><?php</span>
<span class="hljs-keyword">namespace</span> <span class="hljs-title">A</span>\<span class="hljs-title">WebBundle</span>\<span class="hljs-title">Form</span>\<span class="hljs-title">Type</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Form</span>\<span class="hljs-title">AbstractType</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Form</span>\<span class="hljs-title">Extension</span>\<span class="hljs-title">Core</span>\<span class="hljs-title">Type</span>\<span class="hljs-title">CountryType</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Form</span>\<span class="hljs-title">Extension</span>\<span class="hljs-title">Core</span>\<span class="hljs-title">Type</span>\<span class="hljs-title">DateType</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Form</span>\<span class="hljs-title">Extension</span>\<span class="hljs-title">Core</span>\<span class="hljs-title">Type</span>\<span class="hljs-title">FileType</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Form</span>\<span class="hljs-title">FormBuilderInterface</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Form</span>\<span class="hljs-title">FormEvent</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Form</span>\<span class="hljs-title">FormEvents</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">OptionsResolver</span>\<span class="hljs-title">OptionsResolver</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Security</span>\<span class="hljs-title">Core</span>\<span class="hljs-title">SecurityContextInterface</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Validator</span>\<span class="hljs-title">Constraints</span>\<span class="hljs-title">Callback</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Validator</span>\<span class="hljs-title">Context</span>\<span class="hljs-title">ExecutionContextInterface</span>;
<span class="hljs-comment">/**
* Form used by Staff to add a new Identity
*
*/</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CreateEmbeddedIdentityType</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">AbstractType</span>
</span>{
<span class="hljs-keyword">protected</span> $securityContext;
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">__construct</span><span class="hljs-params">(SecurityContextInterface $securityContext)</span>
</span>{
<span class="hljs-keyword">$this</span>->securityContext = $securityContext;
}
<span class="hljs-comment">/**
* {<span class="hljs-doctag">@inheritdoc</span>}
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">buildForm</span><span class="hljs-params">(FormBuilderInterface $builder, array $options)</span>
</span>{
$futureYear = <span class="hljs-keyword">new</span> \DateTime(<span class="hljs-string">'+80 years'</span>);
$futureYear = (int) $futureYear->format(<span class="hljs-string">'Y'</span>);
$pastYear = <span class="hljs-keyword">new</span> \DateTime(<span class="hljs-string">'-20 years'</span>);
$pastYear = (int) $pastYear->format(<span class="hljs-string">'Y'</span>);
$builder
->add(<span class="hljs-string">'file'</span>, FileType::class)
->add(<span class="hljs-string">'number'</span>, <span class="hljs-keyword">null</span>, <span class="hljs-keyword">array</span>(
<span class="hljs-string">'required'</span> => !<span class="hljs-keyword">$this</span>->securityContext->isGranted(<span class="hljs-string">'ROLE_IDENTITY_SUBMIT_EMPTY'</span>),
))
->add(<span class="hljs-string">'expiryDate'</span>, DateType::class, <span class="hljs-keyword">array</span>(
<span class="hljs-string">'years'</span> => range($futureYear, $pastYear),
<span class="hljs-string">'required'</span> => !<span class="hljs-keyword">$this</span>->securityContext->isGranted(<span class="hljs-string">'ROLE_IDENTITY_SUBMIT_EMPTY'</span>),
))
->add(<span class="hljs-string">'nationality'</span>, CountryType::class, <span class="hljs-keyword">array</span>(
<span class="hljs-string">'placeholder'</span> => <span class="hljs-string">'person.identity.form.nationality_empty'</span>,
<span class="hljs-comment">// Required server-side, but as the field is handled with JavaScript, the HTML 5 popup doesn't show up</span>
<span class="hljs-string">'required'</span> => <span class="hljs-keyword">false</span>,
<span class="hljs-string">'attr'</span> => <span class="hljs-keyword">array</span>(
<span class="hljs-string">'data-type'</span> => <span class="hljs-string">'chosen'</span>
),
))
;
$securityContext = <span class="hljs-keyword">$this</span>->securityContext;
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">(FormEvent $event)</span> <span class="hljs-title">use</span> <span class="hljs-params">($securityContext, $futureYear, $pastYear)</span> </span>{
$form = $event->getForm();
$form
->add(<span class="hljs-string">'number'</span>, <span class="hljs-keyword">null</span>, <span class="hljs-keyword">array</span>(
<span class="hljs-string">'required'</span> => !$securityContext->isGranted(<span class="hljs-string">'ROLE_IDENTITY_SUBMIT_EMPTY'</span>),
<span class="hljs-string">'constraints'</span> => <span class="hljs-keyword">array</span>(
<span class="hljs-keyword">new</span> Callback(<span class="hljs-keyword">array</span>(
<span class="hljs-string">'groups'</span> => <span class="hljs-keyword">array</span>(<span class="hljs-string">'create'</span>, <span class="hljs-string">'edit'</span>),
<span class="hljs-string">'callback'</span> => <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">($value, ExecutionContextInterface $context)</span> <span class="hljs-title">use</span> <span class="hljs-params">($form, $securityContext)</span> </span>{
$file = $form->get(<span class="hljs-string">'file'</span>)->getData();
<span class="hljs-keyword">if</span> (<span class="hljs-keyword">empty</span>($value) && <span class="hljs-keyword">null</span> != $file && !$securityContext->isGranted(<span class="hljs-string">'ROLE_IDENTITY_SUBMIT_EMPTY'</span>) && $context->getViolations()->count() < <span class="hljs-number">1</span>) {
$context->addViolation(<span class="hljs-string">'This value should not be blank.'</span>);
}
}
)),
),
))
->add(<span class="hljs-string">'expiryDate'</span>, DateType::class, <span class="hljs-keyword">array</span>(
<span class="hljs-string">'years'</span> => range($futureYear, $pastYear),
<span class="hljs-string">'required'</span> => !<span class="hljs-keyword">$this</span>->securityContext->isGranted(<span class="hljs-string">'ROLE_IDENTITY_SUBMIT_EMPTY'</span>),
<span class="hljs-string">'constraints'</span> => <span class="hljs-keyword">array</span>(
<span class="hljs-keyword">new</span> Callback(<span class="hljs-keyword">array</span>(
<span class="hljs-string">'groups'</span> => <span class="hljs-keyword">array</span>(<span class="hljs-string">'create'</span>, <span class="hljs-string">'edit'</span>),
<span class="hljs-string">'callback'</span> => <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">($value, ExecutionContextInterface $context)</span> <span class="hljs-title">use</span> <span class="hljs-params">($form, $securityContext)</span> </span>{
$file = $form->get(<span class="hljs-string">'file'</span>)->getData();
<span class="hljs-keyword">if</span> (<span class="hljs-keyword">empty</span>($value) && <span class="hljs-keyword">null</span> != $file && !$securityContext->isGranted(<span class="hljs-string">'ROLE_IDENTITY_SUBMIT_EMPTY'</span>) && $context->getViolations()->count() < <span class="hljs-number">2</span>) {
$context->addViolation(<span class="hljs-string">'This value should not be blank.'</span>);
}
}
)),
),
))
->add(<span class="hljs-string">'nationality'</span>, CountryType::class, <span class="hljs-keyword">array</span>(
<span class="hljs-string">'placeholder'</span> => <span class="hljs-string">'person.identity.form.nationality_empty'</span>,
<span class="hljs-comment">// Required server-side, but as the field is handled with JavaScript, the HTML 5 popup doesn't show up</span>
<span class="hljs-string">'required'</span> => <span class="hljs-keyword">false</span>,
<span class="hljs-string">'attr'</span> => <span class="hljs-keyword">array</span>(
<span class="hljs-string">'data-type'</span> => <span class="hljs-string">'chosen'</span>
),
<span class="hljs-string">'constraints'</span> => <span class="hljs-keyword">array</span>(
<span class="hljs-keyword">new</span> Callback(<span class="hljs-keyword">array</span>(
<span class="hljs-string">'groups'</span> => <span class="hljs-keyword">array</span>(<span class="hljs-string">'create'</span>, <span class="hljs-string">'edit'</span>),
<span class="hljs-string">'callback'</span> => <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">($value, ExecutionContextInterface $context)</span> <span class="hljs-title">use</span> <span class="hljs-params">($form, $securityContext)</span> </span>{
$file = $form->get(<span class="hljs-string">'file'</span>)->getData();
<span class="hljs-keyword">if</span> (<span class="hljs-keyword">empty</span>($value) && <span class="hljs-keyword">null</span> != $file && !$securityContext->isGranted(<span class="hljs-string">'ROLE_IDENTITY_SUBMIT_EMPTY'</span>) && $context->getViolations()->count() < <span class="hljs-number">3</span>) {
$context->addViolation(<span class="hljs-string">'This value should not be blank.'</span>);
}
}
)),
),
))
;
}
);
}
<span class="hljs-comment">/**
* {<span class="hljs-doctag">@inheritdoc</span>}
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">configureOptions</span><span class="hljs-params">(OptionsResolver $resolver)</span>
</span>{
$validationGroups = <span class="hljs-keyword">array</span>(<span class="hljs-string">'create'</span>);
<span class="hljs-keyword">if</span> (<span class="hljs-keyword">$this</span>->securityContext->isGranted(<span class="hljs-string">'ROLE_IDENTITY_SUBMIT_EMPTY'</span>)) {
$validationGroups = <span class="hljs-keyword">array</span>(<span class="hljs-string">'createEmpty'</span>);
}
$resolver->setDefaults(<span class="hljs-keyword">array</span>(
<span class="hljs-string">'validation_groups'</span> => $validationGroups,
<span class="hljs-string">'data_class'</span> => <span class="hljs-string">'A\WebBundle\Entity\Identity'</span>,
));
}
<span class="hljs-comment">/**
* {<span class="hljs-doctag">@inheritdoc</span>}
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getBlockPrefix</span><span class="hljs-params">()</span>
</span>{
<span class="hljs-keyword">return</span> <span class="hljs-string">'create_identity'</span>;
}
}
</code></pre></div><figcaption>CreateEmbeddedIdentityType</figcaption></figure></div></div>
<p>Comme vous pouvez le constater, j’ai donc des contraintes dans l’entité, et des contraintes dans le formulaire (afin d’avoir accès au contexte de sécurité).</p>
<p>Le problème que je tente de résoudre actuellement, c’est que les contraintes au niveau de l’entité semblent ne pas être prises en compte quand le formulaire est embarqué dans mon PersonType. Dans ce PersonType, j’ai pourtant bien mis que les objets Identity devaient être valides (contrainte Valid, qui par défaut boucle sur les éléments d’une collection). Mais apparemment cela ne déclenche que la validation formulaire, à en croire la liste des validations (avant d’avoir ajouté les tests sur le nombre de contraintes dans les fonctions de rappel, évidemment), tandis que le formulaire d’ajout "<em>standalone</em>" prend en compte les deux sources de contrainte (les tests sur le nombre de contraintes est là pour éviter d’avoir deux fois le même message, une fois du formulaire et une fois de l’annotation).</p>
<p>Comme dit précédemment, je pensais qu’il s’agissait d’une différence entre <code>handleRequest()</code> et <code>submit()</code>, mais après avoir testé, c’est une mauvaise piste.</p>
<p>Evidemment, je pourrais redéfinir le champ d’upload au même moment que les autres et voir s’il est vide et pas les autres (ce qui est un peu le pendant logique de ce que je fais avec eux), mais je trouve cela vraiment <em>hacky</em>…</p>
<p>J’ai aussi tenté d’ajouter le groupe de validation <code>'Default'</code> (avec et sans majuscule), mais apparemment ça n’apporte rien.<br>
Evidemment, un nouveau validateur ne serait pas très utile, étant donné que c’est comme si les annotations de validation n’étaient pas prises en compte. Et le mettre au niveau du formulaire ne serait pas non plus pratique…</p>
<p>Je complète mon scénario (les points 3 en italique) :</p>
<ol>
<li>
<p>Si j’ai les droits d’uploader des fichiers sans faire plus</p>
<ol>
<li>et que je créé une nouvelle personne : je n’ai aucune contrainte.</li>
<li>et que j’ajoute un document à une personne existante : le champ du fichier est obligatoire</li>
<li><em>et que j’ajoute une des données du document sans ledit document, on doit le demander</em></li>
</ol>
</li>
<li>
<p>Si je dois remplir les champs</p>
<ol>
<li>
<p>et que je créé une nouvelle personne</p>
<ol>
<li>et que je n’ai pas de document à ce moment : je n’ai aucune contrainte sur les champs du document</li>
<li>et que je renseigne le document : les autres champs du document "deviennent" obligatoires</li>
<li><em>et que je renseigne un des champs du document, mais pas celui-ci, j’aimerais que la contrainte existante s’applique (ce qui n’est actuellement pas le cas)</em></li>
</ol>
</li>
<li>
<p>et que j’ajoute un document à une personne existante :</p>
<ul>
<li>tous les champs sont obligatoires</li>
</ul>
</li>
</ol>
</li>
</ol>
<p>Est-ce que quelqu’un voit ce autour de quoi je tourne sans m’en rendre compte ?</p>
<p>Merci</p>
<h4 id="edit">Edit<a aria-hidden="true" href="#edit"><span class="icon icon-link"></span></a></h4>
<p>Alors avec Symfony 2.8.28, les groupes de validation peuvent ne pas être les mêmes pour le formulaire et pour l’entité. Donc dans l’exemple fourni ici, les annotations n’étaient pas prises en compte dans le formulaire embarqué parce que le groupe "cascadé" est <code>Default</code>. En revanche, lors de la même soumission, dans le formulaire c’est le groupe déclaré dans CreateEmbeddedIdentityType::configureOptions qui est utilisé… Donc deux groupes dans le cas d’un formulaire embarqué.</p>
<p>Du coup, maintenant que j’ai compris comment lancer la validation avec les annotations, je peux créer un validateur un peu plus complexe. Voilà qui sera plus propre et souple.</p>Validation spécifique qui me pose une colle, message #1719202018-01-18T12:57:39+01:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/10144/validation-specifique-qui-me-pose-une-colle/?page=1#p171920<p>Bonjour à tous !</p>
<p>Aujourd’hui, je suis ici parce que j’ai une contrainte de validation qui me paraît un peu particulière. Je tiens à préciser que je suis sous <strong>Symfony 2.8</strong>, et que passer à une version plus récente (probablement 3) n’est pas considérable dans les mêmes délais. <img alt=":p" src="/static/smileys/langue.png"></p>
<p>L’idée est de valider l’upload de scans de documents d’identité, et de renseigner en même temps certaines valeurs (code de sécurité. date d’expiration). Valider des champs, pas de souci, valider un upload, OK, valider une entité, pas de souci. Le problème est qu’il y a des cas spécifiques.</p>
<p>D’une part, on peut uploader un de ces documents pour une personne existante, donc formulaire "principal".<br>
D’autre part, à la création d’une nouvelle personne, celui qui remplit peut fournir le scan et saisir ces informations, donc formulaire embarqué.</p>
<p>Mais indépendamment de cela, certaines personnes peuvent ne pas avoir à remplir les champs texte/date/autres, en clair ne fournir que le scan.</p>
<p>Le scénario est donc le suivant :</p>
<ol>
<li>Si j’ai les droits d’uploader des fichiers sans faire plus<ol>
<li>et que je créé une nouvelle personne : je n’ai aucune contrainte.</li>
<li>et que j’ajoute un document à une personne existante : le champ du fichier est obligatoire</li>
</ol>
</li>
<li>Si je dois remplir les champs<ol>
<li>et que je créé une nouvelle personne<ol>
<li>et que je n’ai pas de document à ce moment : je n’ai aucune contrainte sur les champs du document</li>
<li>et que je renseigne le document : les autres champs du document "deviennent" obligatoires</li>
</ol>
</li>
<li>et que j’ajoute un document à une personne existante :<ul>
<li>tous les champs sont obligatoires</li>
</ul>
</li>
</ol>
</li>
</ol>
<p>Du coup, je tente de voir comment spécifier les contraintes <em>serveur</em> en fonction de cela.</p>
<p>J’ai déjà deux formulaires, un pour embarquer et un autre "<em>standalone</em>". Pour l’instant, le second hérite du premier (principalement parce que le second contient le bouton de soumission dans sa déclaration des champs).</p>
<p>J’avais pensé à une validation par callback, mais je ne vois pas comment je peux passer le service <code>security.authorization_checker</code> à ma méthode (qui réside dans l’entité).<br>
J’ai aussi réfléchi aux événements de formulaire pour ajouter le champ avec les contraintes correctes, mais avec PRE_SET_DATA, POST_SET_DATA et PRE_SUBMIT, je n’ai pas la propriété qui est remplie. Je l’aurais avec POST_SUBMIT, mais évidemment une fois le formulaire soumis au sens Symfony, plus moyen d’y ajouter un champ…</p>
<p>Je pourrais me créer mon propre validateur, mais ça me paraît relativement <em>overkill</em>…</p>
<p>Mon souci est donc soit d’accéder au service <code>security.authorization_checker</code>, soit de savoir si un fichier a bien été envoyé.</p>
<p>Est-ce que quelqu’un aurait déjà rencontré un cas similaire ?</p>
<p>Merci d’avance <img alt=":)" src="/static/smileys/smile.png"></p>
<h4>Edit</h4>
<p>En fait, j’étais resté bloqué sur <code>@Assert\Callback()</code>, qui forcément est dans l’entité. Mais si je définis la contrainte dans la classe de fomrmulaire, j’ai accès à plus de choses, notamment les valeurs "brutes" du formulaire. Le seul hic maintenant est que j’ai une "double" validation, une avec les annotations dans l’entité, et une autre de par les contraintes dans la classe de formulaire. Je soupçonne une différence entre l’appel à <code>handleRequest()</code> et <code>submit()</code>, l’une impliquant la validation des mappings et pas l’autre.</p>Que mettre dans un message de validation ?, message #1701632018-01-03T19:00:16+01:00qwerty/@qwertyhttps://zestedesavoir.com/forums/sujet/10017/que-mettre-dans-un-message-de-validation/?page=1#p170163<p>Pour info.</p>
<blockquote>
<p>Le message suivant a été laissé à destination des validateurs :</p>
<blockquote>
<p>L’article à fait l’objet d’une bêta où il à bien évolué ; il est temps de le publier, grâce au Défi de Clem. L’article compte trois parties qui se veulent neutres (toute remarque à ce sujet est bienvenue), et une quatrième plus polémique, pour ne pas prendre partie dès le début.</p>
</blockquote>
</blockquote>
<p>Pour ma part, ça me va <img alt=":-)" src="/static/smileys/smile.png"> En gros. Concernant les « retours » (correction de la valido), une synthèse de ce qui a changé entre deux versions ( « j’ai corrigé les fautes qui m’ont été remonté ») me semble être une bonne piste.</p>Que mettre dans un message de validation ?, message #1701622018-01-03T18:50:12+01:00Lika Kavkasidze/@Lika%20Kavkasidzehttps://zestedesavoir.com/forums/sujet/10017/que-mettre-dans-un-message-de-validation/?page=1#p170162<p>Salut à tous,</p>
<p>j’ai envoyé mon premier article en validation aujourd’hui, et je me demandait ce qu’il était apprécié de voir dans les commentaires de validation, je n’ai pas été très inspiré pour celui-ci, j’ai donc fait simple :</p>
<ul>
<li>que s’est-il passé durant la beta ;</li>
<li>qu’est-ce que je veux faire de l’article.</li>
</ul>
<p>Si vous êtes auteurs, que mettez-vous dans vos messages ?
Si vous êtes validateur, qu’aimez / aimeriez-vous bien voir ?</p>
<p>EDIT : Le sujet de l’article (resté en bêta) est <a href="https://zestedesavoir.com/forums/sujet/7329/le-renseignement-francais-et-la-loi-du-24-juillet-20/">ici</a>, si vous voulez voir. </autopromo></p>Temps de validation, message #1505432017-05-18T12:19:04+02:00qwerty/@qwertyhttps://zestedesavoir.com/forums/sujet/8619/temps-de-validation/?page=1#p150543<figure>
<blockquote>
<p>Ok, merci à vous deux, je vais apprendre à attendre – en rédigeant un autre article <img alt="^^" src="/static/smileys/hihi.png"> ?</p>
</blockquote>
<figcaption><a href="https://zestedesavoir.com/forums/sujet/8619/temps-de-validation/?page=1#p150536">Dwayn</a></figcaption>
</figure>
<p>Les billets peuvent aussi aider à faire passer le temps.</p>