2016-07-22 2 views
0

Это моя первая попытка сохранить информацию о продукте в mysql. Я заранее извиняюсь, если код не в лучшей форме, я все еще участвую. Это мой registration.html.twigSymfony3 пытается сохранить в db с формами и twig

{% extends 'base.html.twig' %} 

    {% block stylesheets %} 
     <link href="{{ asset('bundles/framework/css/myStyle.css') }}" rel="stylesheet" /> 
    {% endblock %} 

{% block title %}Create your product {% endblock %} 


{% block body %} 
    <div id="container"> 
    <h1 id="header">Create your product and store it in the database!</h1> 
    </div> 

    <form method="POST" id="registrationForm"> 
    <input type="text" id="pName" placeholder="Product name"> 
     <input type="text" id="pPrice" placeholder="Product price"> <br> 
     <textarea id="pDescription" placeholder="Product description"></textarea> 
    </form> 
    <input type="submit" value="Submit" > 

{% endblock %} 

У меня также есть продукт класса лица с сеттеров & добытчиками, не собирается включать его здесь из-за количества кода.

Это мой ProductForm:

class ProductForm extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('pName') 
      ->add('pPrice') 
      ->add('pDescription') 
     ; 
    } 
} 

и здесь является частью моего контроллера для /вставить страницу:

public function createAction() 
    { 
     $product = 'AppBundle\Entity\Product'; 
     $form = $this->createForm(ProductForm::class, $product); 

     if($form->isValid()) 
     { 
      $em= $this->getDoctrine()->getManager(); 
      //Save into database code should go here... 
     } 
    } 

Для начала, он жалуется, что Expected argument of type "object, array or empty", "string" given, который я Догадка приходит от контроллера, где я пытаюсь передать переменную $product с указанным путем в класс сущности. В документации эта часть очень запутанна. Он говорит, что $product = ... оставил меня без изменений, мне удалось понять, что это путь к сущностному классу, который должен быть передан методу createForm, но, как упоминалось ранее, он жалуется, что это string, а не array. Может ли кто-нибудь просмотреть мой код и дать отзыв о том, что не так? Im действительно потерял в данный момент и не уверен, что делать дальше или как это решить. Заранее спасибо.

ответ

1
  1. В ваших полях формы нет name атрибутов, что означает, что из него не будут отправляться никакие данные.

  2. В контроллере, $product должен быть экземпляром AppBundle\Entity\Product, а не только имя класса:

    $product = new \AppBundle\Entity\Product(); 
    
  3. форма не будет автоматически извлекать данные из запроса HTTP (которые не существуют, так как точки 1), необходимо обработать запрос вручную:

    // inject the request here 
    public function createAction(\Symfony\Component\HttpFoundation\Request $request)  { 
        // ... 
        $form->handleRequest($request); 
        if ($form->isValid()) { 
         // ... 
        } 
    } 
    
+0

Спасибо за ваш ответ, что вы имеете в виду 'name' атрибуты? Я пытался понять это, но я не мог. Я также изменил переменную '$ product' на ту, которую вы указали, но я все равно получаю ту же ошибку, заявляя, что она ожидает массив или объект и полученную строку. –

+0

'' - атрибуты в этом элементе: 'type',' id' и 'placeholder'. Поле формы, такое как 'input' с типом' text', нуждается в атрибуте 'name', под которым значение будет отправлено на сервер с запросом' POST'. Например, значение с этим полем: '' будет позже доступно в объекте '$ request', например:' $ request-> request-> get ('theFieldName') ', а также будет присутствовать в' $ _POST ['theFieldName'] '. –

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