2013-06-09 1 views
6

Так у меня есть неизвестная ошибка при запуске использовать 2.3 версии Symfony Утверждай EntitySymfony2, Ошибка «Загруженный файл был слишком большим». без поля файла

class FormRegister 
{ 
    /** 
    * @Assert\Regex 
    * (
    *  pattern="/^[a-zA-Z0-9]{1,}$/i", 
    *  message="You use illegal character(s). Must be a-z, A-Z and 0-9 symbols." 
    *) 
    * @Assert\Length 
    * (
    *  min="4", 
    *  minMessage="User name must be more then 3 characters.", 
    *  max="15", 
    *  maxMessage="User name must be less then 16 characters." 
    *) 
    */ 
    private $username; 

    public function setUsername($username) 
    { 
     $this->username = $username; 
     return $this; 
    } 

    public function getUserName() 
    { 
     return $this->username; 
    } 
    /** 
    * @Assert\NotBlank 
    * (
    *  message="Password is required. :)" 
    *) 
    * @Assert\Length 
    * (
    *  min="4", 
    *  minMessage="Password must be more then 3 characters.", 
    *  max="25", 
    *  maxMessage="Password must be less then 255 characters." 
    *) 
    */ 
    private $password; 

    public function setPassword($password) 
    { 
     $this->password = $password; 
     return $this; 
    } 

    public function getPassword() 
    { 
     return $this->password; 
    } 
    /** 
    * @Assert\NotBlank 
    * (
    *  message="Email is required." 
    *) 
    * @Assert\Email 
    * (
    *  message="Email address has incorrect type, try re-type or use another mail." 
    *) 
    */ 
    private $email; 

    public function setEmail($email) 
    { 
     $this->email = $email; 
     return $this; 
    } 

    public function getEmail() 
    { 
     return $this->email; 
    } 
    /** 
    * @Assert\True 
    * (
    *  message="We can't register if you will not accept our terms." 
    *) 
    */ 
    private $terms; 

    public function setTerms($terms) 
    { 
     $this->terms = $terms; 
     return $this; 
    } 

    public function getTerms() 
    { 
     return $this->terms; 
    } 
} 

FormType

class FormRegisterType extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('username', 'text', array('label' => 'User Name :')) 
       ->add('password', 'repeated', 
         array(
        'type' => 'password', 
        'first_name' => 'pass1', 
        'second_name' => 'pass2', 
        'first_options' => array('label' => 'Password:',), 
        'second_options' => array('label' => 'Confirm Password:'), 
        'error_bubbling' => true, 
        'invalid_message' => 'Password not matched.')) 
       ->add('email', 'text', array('label' => 'E-Mail')) 
       ->add('terms', 'checkbox', array('attr' => array('class' => 'checkBoxTerms'))); 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Main\SiteBundle\Form\FormRegister', 
      'required' => false)); 
    } 

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

Действие

public function registerAction() 
    { 
     $formRegister = $this->createForm(new FormRegisterType(), new FormRegister()); 

     if ($this->getRequest()->isMethod('post')) 
     { 
      $em = $this->getDoctrine()->getManager(); 

      $formRegister->handleRequest($this->getRequest()); 
      $formData = $formRegister->getData(); 

      if ($formRegister->get('username')->isValid()) 
      { 
       $exist = $em->getRepository('MainSiteBundle:User') 
         ->findOneByUsername($formData->getUserName()); 

       if ($exist) 
       { 
        $error = new FormError('Such account name as "'.$formData->getUserName().'" already exists'); 
        $formRegister->get('username')->addError($error); 
       } 
      } 

      if ($formRegister->isValid()) 
      { 
       echo 'form is valid'; 
       $ef = $this->get('security.encoder_factory'); 
       $user = new User(); 
       $pass = $ef->getEncoder($user)->encodePassword($formData->getPassword(), $user->getSalt()); 

       $user->setPassword($pass) 
         ->setUsername($formData->getUsername()) 
         ->setEmail($formData->getEmail); 

       $em->persist($user); 
       $em->flush(); 
      } 
      else 
      { 
       var_dump($formRegister->getErrors()); 
      } 
     } 

     $twig = 'MainSiteBundle:Default:register.html.twig'; 
     $data = array(
      'formRegister' => $formRegister->createView()); 

     return $this->render($twig, $data); 
    } 

Если ввод достоверных данных я все еще будет есть ошибка в «типе файла», который я не использовал!

array (size=1) 
    0 => 
    object(Symfony\Component\Form\FormError)[1418] 
     private 'message' => string 'The uploaded file was too large. Please try to upload a smaller file.' (length=69) 
     protected 'messageTemplate' => string 'The uploaded file was too large. Please try to upload a smaller file.' (length=69) 
     protected 'messageParameters' => 
     array (size=1) 
      '{{ max }}' => string '2048M' (length=5) 
     protected 'messagePluralization' => null 

В чем проблема? Я вообще не отправлял файл. Он появляется в версии 2.3, которую я начинаю использовать.

var_dump($formRegister->getErrorsAsString()); 

Дайте мне такие

string 'ERROR: The uploaded file was too large. Please try to upload a smaller file. 
username: 
    No errors 
password: 
    first: 
     No errors 
    second: 
     No errors 
email: 
    No errors 
terms: 
    No errors 
' (length=212) 

ОБНОВЛЕНО

ШАБЛОН

<form method="POST" action="{{ path ('site_register') }}" {{ form_enctype(formRegister)}}> 

    {{ form_errors(formRegister.username) }} 
    {{ form_label(formRegister.username) }} 
    {{ form_widget(formRegister.username) }} 
    <br /> 
    {{ form_errors(formRegister.password.first) }} 
    {{ form_label(formRegister.password.first) }} 
    {{ form_widget(formRegister.password.first) }} 
    <br /> 
    {{ form_errors(formRegister.password.second) }} 
    {{ form_label(formRegister.password.second) }} 
    {{ form_widget(formRegister.password.second) }} 
    <br /> 
    {{ form_errors(formRegister.email) }} 
    {{ form_label(formRegister.email) }} 
    {{ form_widget(formRegister.email) }} 
    <br /> 
    {{ form_errors(formRegister.terms) }} 
    <div class="terms"> 
     {{ form_widget(formRegister.terms) }} I read <a href="#">this terms</a> and accept. 
    </div> 

    <input type="submit" value="Register"/> 
</form> 
+0

Как и где вы сбросили ошибку файла формы?! пожалуйста, предоставьте эту информацию – nifr

+0

посмотреть в действии контроллера Я опубликовал – user1954544

+0

это сообщение об ошибке, которое отображается при отправке формы и отображении выборки? как выглядит шаблон? – nifr

ответ

-2

в symfony.com 2,3 версии изменен BETA, откат до 2,2 стабильных неприятностей, потому что она не проверена и BETA

+0

3 июня Symfony 2.3 был выпущен как стабильная версия. Вы можете прочитать больше здесь: http://symfony.com/blog/symfony-2-3-0-the-first-lts-is-now-available – dgil

+0

три дня назад это было с тегом BETA;) посмотреть на github - много ошибок на 2.3, так что я буду ждать немного $;) – user1954544

+0

У меня такая же проблема с symfony 2.3.4 ... – Sebastian

1

Кажется, вы пытаетесь загрузить файл в какой-то момент, который является слишком большим. Используете ли вы какую-то другую форму в этом действии?

Вы можете прочитать в документации Symfony 2.3: File validation

uploadIniSizeErrorMessage

Тип: stringпо умолчанию: The file is too large. Allowed maximum size is {{ limit }}

Сообщение, которое отображается, еслизагруженный файл больше, чем параметр upload_max_filesize PHP.ini.

+1

утверждает, что он не загружает файл, и, как вы можете видеть, его форма не содержит тип файла. я думаю, он уже понимает, что говорит ошибка ;-) В любом случае намек на php.ini 'upload_max_fileisze' хорош для других, сталкивающихся с исключением, возможно. – nifr

+0

Да, я видел, что он не отправляет файл. Однако в некоторых других точках может иметь другую форму и поле для загрузки. Я обновил свой ответ, чтобы спросить его об этом. – dgil

+0

, конечно, нет, вы думаете, что я скрою «основную часть кода с объявлением правил файла, а затем спрошу о ошибке файла»? нет правил для файла, простая форма регистра (как в руководстве) и нет, одна форма - одно действие - это все код – user1954544

8

Вы должны увеличить оба значения в php.ini

post_max_size = 50M  
upload_max_filesize = 50M 

вы можете увидеть конфигурацию php.ini:

php -i | grep "your text to find" 

Я надеюсь помочь вам

+0

Nice. Это был 'post_max_size', который не был установлен в правильный размер. Не знал, что мне нужно было установить/синхронизировать оба значения. – flu

1

В вашем Entity.php необходимо указать свойство "maxSize" к вашему Assert file.

Единица измерения этого байта.

"2147483648" для 2GB.

/** 
* @ORM\Column(type="string", length=255) 
*/ 
public $path; 

/** 
* @Assert\File(maxSize="2147483648") 
*/ 
public $file; 
Смежные вопросы