2016-07-22 32 views
0

這是我第一次嘗試將產品信息存儲到mysql中。我提前道歉,如果代碼不是最好的形式,我仍然在學習。這是我的registration.html.twigSymfony3試圖用形式和樹枝保存到db

{% 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 %} 

我也有setter方法&干將產品實體類,這裏將不會包括由於代碼量的它。

這是我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。有人可能會檢查我的代碼並對錯誤進行反饋嗎?我現在真的迷失了,不知道下一步該做什麼或如何解決這個問題。先謝謝你。

回答

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'。一個表單域,比如類型爲「text」的'input',需要一個'name'屬性,在這個屬性下,這個值將通過'POST'請求​​發送到服務器。例如,這個字段的值:''稍後可以在'$ request'對象中訪問,如下所示:'$ request-> request-> get('theFieldName' )',並且將出現在$ _POST ['theFieldName']'中。 –