2016-04-28 48 views
1

このトピックは初めてのので、タグフォームのコレクションをタスクフォームに組み込むことを試みています。私はページhttp://symfony.com/doc/2.8/cookbook/form/form_collections.htmlで与えられた簡単な例を複製しようとしています。与えられたコードをコピーしても、タグフォームの名前フィールドではなくタスクフォームの説明フィールドが表示されます。私はいくつかのことを試みましたが、それを理解することはできませんでした。 これは、レンダリングされたページがどのように見えるかです: 以下Here is the screenshot of the browser output pageフォームの埋め込みコレクション:埋め込みフォームフィールドは表示されません。

は小枝のファイルである:以下

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

{% block body %} 

    <h3>Embedded Collection of Forms!</h3> 

    {{ form_start(form) }} 
    {{ form_row(form.description) }} 
    {{ form_row(form.tags) }} 
    <h3>Tags</h3> 
    <ul class="tags"> 
     {% for tag in form.tags %} 
      {# {{ form_widget(tag) }} #} 
      <li>{{ form_row(tag.name) }}</li> 
      {% endfor %} 
    </ul> 
    {{ form_end(form) }} 

{% endblock %} 

コントローラのコードです:

以下
<?php 

namespace AppBundle\Controller; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use AppBundle\Entity\Task; 
use AppBundle\Entity\Tag; 
use AppBundle\Form\TaskType; 

class DefaultController extends Controller 
{ 
    /** 
    * @Route("/", name="homepage") 
    */ 
    public function indexAction(Request $request) 
    { 
     $task = new Task(); 

     // dummy code - this is here just so that the Task has some tags 
     // otherwise, this isn't an interesting example 
     $tag1 = new Tag(); 
     $tag1->name = 'tag1'; 
     $task->getTags()->add($tag1); 
     $tag2 = new Tag(); 
     $tag2->name = 'tag2'; 
     $task->getTags()->add($tag2); 
     // end dummy code 

     $form = $this->createForm(new TaskType($task)); 

     $form->handleRequest($request); 

     return $this->render('default/index.html.twig', array(
        'form' => $form->createView(), 
     )); 
    } 
} 

はTaskType.php

です
<?php 

namespace AppBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use Symfony\Component\Form\Extension\Core\Type\CollectionType; 

class TaskType extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('description'); 

     $builder->add('tags', CollectionType::class, array(
      'entry_type' => TagType::class 
     )); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Task', 
     )); 
    } 
} 

下記はTagType.phpです以下は

<?php 

namespace AppBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 

class TagType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name'); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Tag', 
     )); 
    } 
} 
以下はあなたが二回、フォームの行をレンダリングすることはできませんタグクラス

<?php 

namespace AppBundle\Entity; 

class Tag 
{ 
    public $name; 
} 
+1

をあなたは$フォーム=の$ this - > CreateFormの(新しいTaskType属性($タスクが)) '持っています。' '$形態のいずれかにそれを変更= $この$ form = $ this-> createForm(TaskType :: class、$ task); '後で詳しく見てみましょう – Dheeraj

+0

Dheerajありがとうございます。これは問題を解決しました。 :) – utkarsh2k2

答えて

2

があるタスククラス

<?php 

namespace AppBundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 

class Task 
{ 
    protected $description; 

    protected $tags; 


    public function __construct() 
    { 
     $this->tags = new ArrayCollection(); 
    } 

    public function getDescription() 
    { 
     return $this->description; 
    } 

    public function setDescription($description) 
    { 
     $this->description = $description; 

     return $this; 
    } 

    public function getTags() 
    { 
     return $this->tags; 
    } 
} 

です。 あなたの小枝テンプレートでこの行を削除します。あなたのコントローラ内部の{{ form_row(form.tags) }}

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

{% block body %} 

    <h3>Embedded Collection of Forms!</h3> 

    {{ form_start(form) }} 
    {{ form_row(form.description) }} 
    <h3>Tags</h3> 
    <ul class="tags"> 
     {% for tag in form.tags %} 
      {# {{ form_widget(tag) }} #} 
      <li>{{ form_row(tag.name) }}</li> 
      {% endfor %} 
    </ul> 
    {{ form_end(form) }} 

{% endblock %} 
+0

info jahllerありがとうございました – utkarsh2k2

+0

こんにちは@ utkarsh2k2これがあなたの質問を解決したのであれば、[それを受け入れる](http://meta.stackexchange.com/q/5234/179419)のチェックマークをクリックしてください。これは、あなたが解決策を見つけ出し、回答者とあなた自身の両方に評判を与えていることを広範なコミュニティに示します。これを行う義務はありません。 –

+0

Hey @Jahller、あなたが提供した情報は正しいですが、私が直面していた問題は解決しませんでした。上記のコメントで言及されたDheerajの解決策よりも判明しました。しかし、私はあなたの解決策に+1を与えました。再度、感謝します :) – utkarsh2k2

関連する問題