簡體   English   中英

在Symfony 2中驗證沒有表單的實體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM