2016-07-22 13 views
0

これは私の最初の製品情報をmysqlに保存しようとしたものです。私はコードが最高の形でない場合は事前にお詫び申し上げます、私はまだ学んでいます。これは私がためにもコードの量を、ここでそれを含めるつもりはない、セッター&ゲッターと製品エンティティクラスを持っている私のregistration.html.twigSymfony3がフォームとtwigで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 %} 

です。

これは私の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ものIコントローラから来て、エンティティクラスに指定されたパスで$product変数を渡そうとします。ドキュメントでは、この部分は非常に混乱しています。それは$product = ...が何もせずに私を残していると言いますが、これはcreateFormメソッドに渡すべきエンティティクラスへのパスであることを理解しましたが、前述のようにではなく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'です。 'text'型の' input'のようなフォームフィールドは 'name'属性を必要とし、その値の下で' POST'リクエストでサーバに値が送られます。たとえば、このフィールドを持つ値は、 '$ input-> request-> get( 'theFieldName' ) 'であり、' $ _POST ['theFieldName'] 'にも存在します。 –

関連する問題