2016-05-24 5 views
1

Я использую Twig для создания формы, как это делает:Twig формы строитель время

Класс:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('name', 'text', array(
      'constraints' => array(new Assert\NotBlank(), new Assert\Length(array('min' => 5))) 
     )) 
     ->add('mail', 'email', array(
      'constraints' => array(new Assert\NotBlank(), new Assert\Email()) 
     )); 
} 

Twig:

<div class="col-xs-12 col-less-padding"> 
    {{ form_start(contactForm, { 'attr': {'class': 'form-horizontal pull-left'} }) }} 
     <div class="form-group"> 
      {{ form_label(contactForm.name, null, { 'label_attr': { 
       'class': 'col-sm-4 control-label' 
      }}) }} 
      <div class="col-sm-6"> 
       {{ form_widget(contactForm.name, { 'attr': { 
        'class': 'form-control' 
       }}) }} 
      </div> 
     </div> 

     <div class="form-group"> 
      {{ form_label(contactForm.mail, null, { 'label_attr': { 
       'class': 'col-sm-4 control-label' 
      }}) }} 
      <div class="col-sm-6"> 
       {{ form_widget(contactForm.mail, { 'attr': { 
        'class': 'form-control' 
       }}) }} 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-sm-offset-4 col-sm-3"> 
       <input type="submit" class="btn btn-primary" value="Send"> 
      </div> 
     </div> 
    {{ form_end(contactForm) }} 
</div> 

Но, похоже, это действительно влияет на время рендеринга моих страниц. Например, статические страницы имеют общее время рендеринга 350-400 мс, но когда я нажимаю на эту страницу контакта, общее время рендеринга составляет 800-850 мс.

Я в среде dev (так что я не использую параметр кэша Twig или сжатие gzip), а панель инструментов отладки говорит, что контроллер взял 652 мс и шаблоны Twig 387ms. Правильное ли это время?

Debug статистика скриншот: here и here

У меня есть только один контроллер файл HomeController.php для всего сайта (это небольшой сайт, так что есть только 9 функций в нем) - является то, что проблема?; здесь функция относительно контактного действия:

HomeController:

/* 8 others functions */ 

public function contactAction(Request $request, Application $app) { 
    $book_id = $app['dao.home']->returnBookId(); 
    $contactForm = $app['form.factory']->create(new ContactType()); 
    $contactForm->handleRequest($request); 

    if ($contactForm->isSubmitted() && $contactForm->isValid()) { 
     $formData = $contactForm->getData(); 
     $msg = 'New message from'.$formData['name'].'('.$formData['mail'].') <br><br>'; 
     $msg .= 'Content : '.$formData['content'].''; 
     mail("[email protected]","New message",$msg); 
     $app['session']->getFlashBag()->add('success', 'Your message was sent successfully.'); 
    } 

    return $app['twig']->render('contact.html.twig', array(
     'active_page' => 'contact', 
     'book_id' => $book_id, 
     'contactForm' => $contactForm->createView())); 
} 

Так использует форму строитель хороший способ построить форму? Или Возможно, мне нужно создать форму самостоятельно с двумя входами html и кнопкой отправки?

Также, , когда целесообразно использовать конструктор форм вместо того, чтобы создавать входы сами по себе?

ответ

1
  1. 450ms не так много, вы не должны беспокоиться, не забывайте: «преждевременной оптимизации является корень всех зол».
  2. в том, что в среде разработчиков? если да, то, вероятно, в производстве (с кешем symfony) будет меньше
  3. в среде dev в debug tolbar вы можете видеть, какая часть занимала больше всего время - что это говорит?
  4. Я не уверен, что вы подразумеваете под «ручной сборкой» формы, но вы должны использовать формы, как в книге symfony, - если вы используете некоторые «прямые» методы сборки объекта формы вместо formbuilder, я сомневаюсь, что будет разница в скорости
+0

Благодарим вас за ответ. Я отредактировал свой вопрос, чтобы правильно рассказать вам все подробности. – cyclone200

+0

652ms кажется много для контроллера «контактной формы», можете ли вы разместить здесь весь код контроллера? – Miro

+0

также убедитесь, что вы не запускаете веб-сайт на очень медленном сервере ... но если статические страницы занимают 450 мс, тогда что-то не так, либо весь ваш стек PHP на вашем сервере медленный (очень слабый сервер или сервер с огромной нагрузкой - это общий сервер?), или у вас есть что-то, что выполняет каждый запрос - возможно, какой-то внешний пакет или какой-либо прослушиватель запросов? – Miro

Смежные вопросы