0

作成したフォームについて助けが必要です。小枝ファイルに 5 つのフォームを作成し、コントローラーを作成しました。フォームからデータベースに値をバインドするにはどうすればよいですか。バインドすると、5 回のうち 1 つの値フォームのみが表示されます。しかし、私は異なる値になるために5回必要です:(、助けてください、私はすでに一日中このことに固執しています..

私の小枝ファイル:

<div class="new-test">
     <h2>New test </h2>
     <form action="{{ path('test.create') }}" method="post">

        Test name:   <input type="text" name="name"/><br>
        Category 1<input type="text" name="category-new" >
        <div id="customWidget">
            <div id="colorSelector1"><div style="background-color: #00ff00"></div>  
          </div>
            <div id="colorpickerHolder1"></div>
        </div>

        Category 2<input type="text" name="category-new" ><br>
        Category 3<input type="text" name="category-new" ><br>
        Category 4<input type="text" name="category-new" ><br>
        Category 5<input type="text" name="category-new" ><br>

        <input type="submit" value="Add">
</form>

私のコントローラー:

 /**
 * @Route("/add/test", requirements={"name" = "\s+"}, name="test.create")
 * @Method("Post")
 * @return array
 */
public function createAction()
{
    $success = 0;
    $name = $this->getRequest()->get('name');




    if( !empty($name) )
    {
        $test = new Test();
        $test->setName($this->getRequest()->get('name'));

        $em = $this->getDoctrine()->getManager();
        $em->persist($test);
        $em->flush();

        $success = 'Test '.$test->getName().' was created';
    }
    else
    {
        $success = 'Test name can not be empty';
    }

      $category = $this->getRequest()->get('category-new');
     for ($i=0; $i<=5; $i++){
     if( !empty($category) )   
       {
        $categoryName = new Category();
        $categoryName->setName($this->getRequest()->get('category-new'));


        $em = $this->getDoctrine()->getManager();
        $em->persist($categoryName);
        $em->flush();

        $success = ' Category '.$categoryName->getName().$i.' was created';

       }

        else
     {
        $success = 'Test name can not be empty';
    }
   }
    return $this->redirect($this->generateUrl('test.new'));
} 
4

2 に答える 2

1

私が正しく理解しているかどうかわからない。異なる値を持つ「category-new」という名前の入力が必要です。その場合、フォームビューに問題があります。

Category *<input type="text" name="category-new" ><br>

名前の末尾には、カテゴリ1の場合はname ="category-new[]"またはname="category-new [1]"、カテゴリ2の場合はname ="category-new[2]"というように括弧を付ける必要があります。

于 2012-10-30T13:37:50.160 に答える
0

テンプレート:

    Category 1<input type="text" name="category-new[]" >
    <div id="customWidget">
        <div id="colorSelector1"><div style="background-color: #00ff00"></div>  
      </div>
        <div id="colorpickerHolder1"></div>
    </div>

    Category 2<input type="text" name="category-new[]" ><br>
    Category 3<input type="text" name="category-new[]" ><br>
    Category 4<input type="text" name="category-new[]" ><br>
    Category 5<input type="text" name="category-new[]" ><br>

つまり、コントローラーは名前がcategory-newの配列を取るということです

/**
 * @Route("/add/test")
 * 
 * @return array
 */
public function createAction()
{
    $success = 0;
    $name = $this->getRequest()->get('name');

    if (!empty($name)) {
        $test = new Test();
        $test->setName($name);

        $em = $this->getDoctrine()->getManager();
        $em->persist($test);
        $em->flush();

        $success = 'Test ' . $test->getName() . ' was created';
    } else {
        $success = 'Test name can not be empty';
    }

    $categoryList = array_map('trim', $this->getRequest()->get('category-new'));

    foreach ($categoryList as $category) {
        if (!empty($category)) {
            $categoryName = new Category();
            $categoryName->setName($category);

            $em = $this->getDoctrine()->getManager();
            $em->persist($categoryName);
            $em->flush();

            $success = ' Category ' . $category . ' was created';

        } else {
            $success = 'Test category-new may not be empty';
        }
    }
    return $this->redirect($this->generateUrl('test_create'));
}

いくつかの言葉

Route("/add/test", requirements={"name" = "\s+"}, name="test.create")

要件は必要ありません このアクションの名前は project_bundlename_controller_action {project}_{bundlename}_test_create になりますが、プロジェクト名とバンドル名はわかりません-難しいことではないと思います。そしていくつかのコード:)

于 2012-10-30T14:54:53.250 に答える