2014-09-24 21 views
0

我在symfony的parameters.yml文件中有一個數字參數,並且在我的包中有一個配置類,我驗證該參數是一個整數,但我得到以下錯誤驗證過程:在Symfony中的parameters.yml中定義整數參數

[Symfony\Component\Config\Definition\Exception\InvalidTypeException]  
Invalid type for path "page_size". Expected int, but got string. 

有沒有辦法在parameters.yml文件中指定參數類型?

EDIT

parameters.yml:

parameters: 
    ... 
    list_page_size: 15 
    ... 

config.yml:

... 
example: 
    page_size: %list_page_size% 
... 

的configuration.php:

class Configuration implements ConfigurationInterface 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function getConfigTreeBuilder() 
    { 
     $treeBuilder = new TreeBuilder(); 
     $rootNode = $treeBuilder->root('example'); 

     $rootNode->children() 

      // Some code here 
      ->integerNode('page_size') 
       ->defaultValue(15) 
      ->end() 
      // More code here 

     ->end(); 

     return $treeBuilder; 
    } 
} 

編輯2

我們已經發現,該異常在束擴展文件(DependencyInjection/ExampleExtension.php)的prepend()方法引發,但該錯誤是不是在同一個文件的load方法拋出。看起來像是在prepend方法執行時沒有加載parameters.yml文件。

+0

你可以發佈你的配置類和你的parameters.yml文件嗎? – 2014-09-24 12:57:52

+0

如果我寫'page_size:1 5'直接在config.yml文件中運行。 – beni0888 2014-09-24 15:30:31

回答

0

如果你輸入的是這樣的:

page_size: "10" 

那麼它是一個正常的行爲。 你不應該用「:

page_size: 10 
+1

這就是我所擁有的,它不會運行。 – beni0888 2014-09-24 15:27:52

1

唯一的例外是,只是因爲is_int檢查失敗

簡單的解決辦法是添加一個正常化的步驟,如:。

// Some code here 
->integerNode('page_size') 
    ->beforeNormalization() 
     ->ifString() 
     ->then(function ($val) { return strval(intval($val)) === $val ? intval($val) : $val; }) 
    ->end() 
    ->defaultValue(15) 
->end() 
// More code here 

還需要很看看http://symfony.com/doc/current/components/config/definition.html#normalization

相關問題