2014-09-22 84 views
1
->add('shots','file', array(
    'multiple' => true, 
    **'constraints' => array(
     new Constraints\Image(array(
      'maxSize' => '10M', 
      'allowSquare' => false, 
      'allowPortrait' => false, 
      'minRatio' => 1.43, 
      'maxRatio' => 2.4 
     )), 
    )** 
)) 

這是一個symfony表單的一部分,帶有整合的表單驗證器。但我得到我不錯誤理解:Symfony:文件約束錯誤

UnexpectedTypeException: Expected argument of type "string", "array" given 

沒有標記的部分寄託都沒有工作。我檢查的形式約束參考,但我沒有得到解決......

+0

您能否提供異常的堆棧跟蹤? – 2014-09-22 22:42:54

+0

@barius我該怎麼做? – Smeaven 2014-09-23 13:07:58

回答

7

這是Symfony\Component\Validator\Constraints\FileValidator拋出你這個例外。 期待您的窗體值是一些可以鑄造成字符串,但得到陣列...

你應該嘗試使用所有約束爲文件的周圍約束,就像這樣:

->add('shots','file', array(
    'multiple' => true, 
    'constraints' => array(
     new All(array(
      'constraints' => array(
       new Image(array(
        'maxSize'  => '10M', 
        'allowSquare' => false, 
        'allowPortrait' => false, 
        'minRatio'  => 1.43, 
        'maxRatio'  => 2.4 
       )) 
      ) 
     )) 
    )) 
)) 

請參閱http://symfony.com/fr/doc/current/reference/constraints/All.html

+0

嘿,這確實有用!但我並不驚訝這個解決方案...有更好的建議嗎?我不明白,爲什麼我的嘗試產生錯誤?! – Smeaven 2014-09-23 13:20:46

+1

這是因爲您正在使用「多個文件上傳器」。所以你的值在邏輯上將是一個File數組。但是你設置的約束不知道如何處理數組值(因爲它拋出異常)。在處理數組或值集時創建約束All用於包裝其他約束 – 2014-09-23 14:12:11

+0

如果這可以幫助您解決問題,請將其標記爲已解決 – 2014-09-23 14:14:28

0

試試這樣說:

use Symfony\Component\Validator\Constraints\Image; 
... 
... 
... 
->add('shots','file', array(
    'multiple' => true, 
    'constraints' => array(
     new Image(array(
      'maxSize'  => '10M', 
      'allowSquare' => false, 
      'allowPortrait' => false, 
      'minRatio'  => 1.43, 
      'maxRatio'  => 2.4 
     )), 
    ) 
)) 
+0

爲什麼要改變一些東西?我做了:'使用Symfony \ Component \ Validator \ Constraints作爲約束',所以我只選擇了一個更短的方式... – Smeaven 2014-09-23 13:10:20

+0

我測試了這個:我得到了同樣的錯誤 – Smeaven 2014-09-23 13:15:56