2015-10-25 87 views
-1

我正在使用FOSUserBundle,但我已經覆蓋了默認控制器來創建我自己的邏輯和窗體。Symfony窗​​體文件驗證

這裏是我的ProfileFormType.php

namespace UserBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

class ProfileFormType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
    $builder->add('avatar', 'file', array('required' => false, 'data_class' => null)); 
    $builder->add('phone', 'text', array('required' => false)); 
    $builder->add('gender', 'choice', array(
     'choices' => array('not specifed' => 'Не указан', 'male' => 'Мужской', 'female' => 'Женский'), 
    )); 
    $builder->add('birthDate', 'date', array('years' => range(date('Y') -100, date('Y')))); 
     $builder->add('locationCountry', 'text', array('required' => false)); 
    $builder->add('locationCity', 'text', array('required' => false)); 
    } 

    public function getParent() 
    { 
     return 'fos_user_profile'; 
    } 

    public function getName() 
    { 
     return 'app_user_profile'; 
    } 
} 

這一刻,沒有文件擴展名的驗證。我應該如何驗證擴展?最佳做法是什麼?

我曾嘗試下一

$builder->add('avatar', 'file', array('required' => false, 'data_class' => null, 'mimeType' => 'image/jpeg')); 

但它返回一個錯誤。順便說一下,我想只接受.png和.jpeg文件。

謝謝

+0

你嘗試在你的檔案實體申報特定的驗證? – scoolnico

+0

實體是用戶,我不保存文件完全在分貝。我保存文件名,然後從數據庫中獲取該名稱。 –

回答

1

正如在我之前的評論說:

/** 
* @Assert\File(
*  mimeTypes = {"image/jpeg", "image/png"}, 
*  mimeTypesMessage = "Only jpeg or png are allowed." 
*) 
*/ 
protected $avatar; 
+0

獲取下一個錯誤。 [語義錯誤]屬性AppBundle \ Entity \ User :: $ avatar中的註釋「@Assert \ File」從未導入。你可能忘記爲這個註釋添加一個「使用」語句嗎? –

+1

'使用'丟失。在用戶實體中添加'使用Symfony \ Component \ Validator \ Constraints as Assert;'。 – scoolnico

+0

非常感謝你! :) –