[英]Validating entities without form in Symfony 2
我正在為Symfony 2創建一個REST API控制器。我開始使用SensioGeneratorBundle創建一個CRUD並修改控制器以充當REST控制器。 但是,我沒有表格所以我正在考慮刪除這部分。
如何在沒有表格的情況下驗證我的字段? 一切都連接到表單,我想要一些自由,包括自定義字段名稱。 例如,POST x和y字段由Symfony解釋為標題和內容。
說實話,表單與驗證沒有直接關系。 讓我解釋一下。
表單組件負責映射從客戶端接收的數據,無論是GET還是POST數據。 因此,它會將字符串映射到代碼的對象(如果不綁定到實體,則可以是數組)。
表格使用驗證器組件在數據映射到實體后驗證實體。 這意味着實體的驗證與表單組件完全分離。 因此,在驗證表單時,它實際上意味着表單組件驗證您的實體而不是表單數據。 得到驗證的是實體,而不是形式。
該表單僅用於獲取字符串表示形式並將其映射到實體層次結構。 文檔反映了這一點,因為表單和驗證是symfony 書的不同部分。
話雖這么說,這也意味着實體的驗證可以很容易地在表單組件之外完成。 您可以將constaints定義為注釋或外部文件(yml,php或xml),並使用驗證器組件驗證實體。 這里的代碼示例取自本書的驗證部分:
use Symfony\Component\HttpFoundation\Response;
use Acme\BlogBundle\Entity\Author;
// ...
public function indexAction()
{
$author = new Author();
// ... do something to the $author object
$validator = $this->get('validator');
$errors = $validator->validate($author);
if (count($errors) > 0) {
return new Response(print_r($errors, true));
} else {
return new Response('The author is valid! Yes!');
}
}
如您所見,此處不涉及任何形式,只有對象和驗證器服務。 此外,Symfony2的驗證組件是完全獨立的。 這意味着您可以在沒有整個框架的情況下使用它。 話雖這么說,當單獨使用時,你松散與其他東西的良好集成。
這樣,您的REST服務接收參數,從中創建實體並使用驗證器服務來驗證其完整性。 使用表單不是驗證實體所必需的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.