Rumah > Soal Jawab > teks badan
Untuk borang, bolehkah kita menggunakan halaman reka bentuk bahagian hadapan untuk bersarang? Atau bolehkah saya hanya menggunakan FormBuilder untuk membuat borang? Bagaimana untuk mengesahkan dan memproses data yang disiarkan dari halaman yang ditulis oleh saya sendiri?
漂亮男人2017-05-16 16:45:53
Saya rasa lebih baik menggunakan FormBuilder untuk mencipta borang
Ada token untuk menghalang serangan CSRF
Lebih mudah untuk mendapatkan data dengan menggabungkan objek
Pengesahan lebih mudah
Mungkin apabila anda mula-mula berhubung dengannya, anda mungkin merasakan FormBuilder agak menyusahkan, tetapi selepas anda membiasakannya, ia nampaknya agak mudah untuk digunakan
怪我咯2017-05-16 16:45:53
Sebaik-baiknya gunakan apa yang dia sediakan Sebenarnya, tidak kira apa jenis susun atur yang anda mahukan, anda boleh menyesuaikannya, anda boleh mengubah suai tema borang, dan anda boleh menyesuaikan beberapa bidang Jika anda membuatnya sendiri, sahkannya diri sendiri!
PHP中文网2017-05-16 16:45:53
Untuk menjawab dua soalan pertama dahulu, borang yang sangat kompleks sudah tentu boleh dibuat menggunakan halaman yang direka pada bahagian hadapan FormBuilder tidak semestinya diperlukan.
Soalan ketiga, @xxfaxy mengatakan bahawa anda perlu mengesahkannya sendiri Pada pendapat saya, Symfony telah menyediakan komponen Pengesahan Jika anda menggunakan Pengesahan, saya tidak fikir ia adalah pengesahan diri sepenuhnya. Rujuk laman web rasmi Symfony, tatal ke hujung halaman, dan lihat bahagian Mengesahkan Nilai dan Tatasusunan.
Saya fikir walaupun rangka kerja menyediakan banyak fungsi, fungsi tersebut adalah universal, dalam beberapa kes khas, jangan dihadkan oleh rangka kerja.
迷茫2017-05-16 16:45:53
Sangat ok!
Malah, teras soalan anda ialah Bagaimana untuk memetakan data pos (jenis Array) kepada entiti (Jenis Entiti) .
Borang ialah abstraksi objek Entiti dan Permintaan, iaitu selepas nama pengguna dalam Entiti anda diabstrakkan oleh komponen Borang, output adalah serupa dengan <input name="entityName[property]" /> , di mana Harta ialah harta (nama medan) dalam entiti anda Semasa handleRequest, nilai yang diserahkan oleh bahagian hadapan akan dipetakan secara automatik kepada harta harta entiti Anda boleh memahami bahawa Borang adalah untuk menjadikan Entiti anda interaktif .
Jadi bagaimana jika anda tidak menggunakan komponen Borang?
Symfony juga menyediakan komponen Serializer yang juga boleh memetakan Array kepada Entiti:
Halaman hadapan anda:
<form>
<input type="text" name="username" />
<input type="text" name="password" />
<button type="submit">Submit</button>
</form>
Entiti Anda:
<?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;
}
// ...
}
Peta BORANG anda kepada entiti:
/**
* $params 就是:
* array(
* 'username' => '狗剩',
* 'password' => '123456'
* )
*/
$params = $request->request->all();
$entity = $this->get('serializer')
->denormalize($params , 'AppBundle\Entity\User');
Sahkan Entiti sama seperti menggunakan Borang:
$errors = $this->get('validator')
->validate($entity);
Rujukan: http://symfony.com/doc/current/components/serializer.html#deserializing-an-object