2012-08-30 38 views
3

我試圖使用外部yml規則集(不在Symfony項目中)使用Symfony2的驗證組件(如2.1分支)驗證導入的csv文件中的數據:使用Symfony驗證組件來驗證具有動態屬性的對象

use Symfony\Component\Validator\Validation; 

$builder = Validation::createValidatorBuilder(); 
$builder->addYamlMapping('rules.yml'); 

$validator = $builder->getValidator(); 

$row = (object)array('name' => 'foo'); 

$violations = $validator->validate($row); 

這是我的YML文件:

stdClass: 
    properties: 
    name: 
     - MinLength: 10 

現在有,它似乎並不可能與Validator組件來驗證具有動態特性(如stdClass或任何其他類對象的問題與魔術獲得者d setters)。

當我運行代碼,我得到一個消息說:

[Symfony\Component\Validator\Exception\ValidatorException] 
Property forename does not exist in class stdClass 

這是由於在突出顯示的行的PropertyMetaclass.php其中存在通過使用property_exists()檢查這顯然因爲它是檢查對不工作類而不是對象。

有誰知道我如何讓Validator使用具有動態屬性的對象?

+0

我更新了代碼以顯示我最新的symfony2.1工作。 – acme

回答

1

不幸的是,目前還無法根據該official statement驗證動態屬性的對象,所以我打開了一個feature request

我的解決方法是編寫一個非常簡單的代碼生成器類,將類定義轉儲到光盤上的文件,然後將其用作數據的類文件。

0

對象不是PHP類型。

在YAML文件,而不是對象使用stdClass的

看到http://php.net/manual/en/language.types.object.php

+0

謝謝,我已經試過了,也沒有運氣。我更新了代碼。 – acme

+0

我現在發現了這個問題,這是一個愚蠢的錯誤 - yml文件被保存爲UTF-8,但沒有工作。我保存了它沒有BOM和代碼繼續。但現在我正面臨另一個問題 - 我更新了這篇文章。 – acme