Maison > Questions et réponses > le corps du texte
Pour les formulaires, pouvons-nous utiliser la page conçue pour l'imbrication ? Ou puis-je utiliser FormBuilder uniquement pour créer des formulaires ? Comment vérifier et traiter les données postées à partir d'une page écrite par moi-même ?
漂亮男人2017-05-16 16:45:53
Je pense qu'il est préférable d'utiliser FormBuilder pour créer des formulaires
Il existe un jeton pour empêcher les attaques CSRF
Il est plus pratique d'obtenir des données en combinant des objets
La validation est plus pratique
Peut-être que lorsque vous le découvrirez pour la première fois, vous aurez peut-être l'impression que FormBuilder est un peu encombrant, mais une fois familiarisé avec lui, il semble assez facile à utiliser
怪我咯2017-05-16 16:45:53
Il est préférable d'utiliser ce qu'il fournit. En fait, quel que soit le type de mise en page que vous souhaitez, vous pouvez le personnaliser, vous pouvez modifier le thème du formulaire et vous pouvez personnaliser certains champs. Si vous le créez vous-même, vérifiez-le. toi-même!
PHP中文网2017-05-16 16:45:53
Pour répondre d'abord aux deux premières questions, des formulaires très complexes peuvent bien sûr être créés à l'aide de pages conçues sur le front-end n'est pas nécessairement nécessaire.
La troisième question, @xxfaxy a dit que vous devez le vérifier vous-même. À mon avis, Symfony a fourni le composant Validation. Si vous utilisez Validation, je ne pense pas qu'il s'agisse d'une auto-vérification complète. Reportez-vous au site officiel de Symfony, faites défiler jusqu'à la fin de la page et consultez la section Validation des valeurs et des tableaux.
Je pense que même si le framework fournit de nombreuses fonctions, ces fonctions sont après tout universelles. Dans certains cas particuliers, ne vous laissez pas limiter par le framework.
迷茫2017-05-16 16:45:53
Tout à fait ok !
En fait, le cœur de votre question est Comment mapper les données de publication (type Array) à l'entité (type Entity) .
Form est une abstraction des objets Entity et Request. C'est-à-dire qu'une fois le nom d'utilisateur de votre entité extrait par le composant Form, la sortie est similaire à <input name="entityName[property]" /> , où Property est la propriété (nom du champ) de votre entité. Lors de handleRequest, la valeur soumise par le front-end sera automatiquement mappée à la propriété property de l'entité. Vous pouvez comprendre que Form est destiné à rendre votre entité interactive .
Et si vous n’utilisez pas le composant Form ?
Symfony fournit également le composant Serializer qui peut également mapper un tableau à une entité :
Votre page front-end :
<form>
<input type="text" name="username" />
<input type="text" name="password" />
<button type="submit">Submit</button>
</form>
Votre entité :
<?php
namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class User
{
/**
* @Assert\NotBlank
*/
protected $username;
/**
* @Assert\NotBlank
*/
protected $password;
public funciton setUsername($username)
{
$this->username = $username;
return $this;
}
public function getUsername()
{
return $this->username;
}
// ...
}
Mappez votre FORMULAIRE à des entités :
/**
* $params 就是:
* array(
* 'username' => '狗剩',
* 'password' => '123456'
* )
*/
$params = $request->request->all();
$entity = $this->get('serializer')
->denormalize($params , 'AppBundle\Entity\User');
Certifiez une entité comme si vous utilisiez Form :
$errors = $this->get('validator')
->validate($entity);
Référence : http://symfony.com/doc/current/components/serializer.html#deserializing-an-object