Symfony2:无法使用表单创建新实体

Symfony2: Can't create new entity with form

我在使用表单创建新的集合实体时遇到问题。 我想用表单创建新的集合实体,然后使用 'collection_user_collections' 路由重定向到集合页面,并能够在用户的集合列表中看到新集合。但是当我按下表单上的提交按钮时,出现以下错误:

      No route found for "POST /profile/": Method Not Allowed (Allow: GET, HEAD)

下面是我的代码:

class Collection{
/**
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

private $name;

private $url;

private $type;

const STATUS_PRIVATE = 0;
const STATUS_PUBLIC = 1;

/**
 * @ORM\ManyToOne(targetEntity="MyMini\UserBundle\Entity\User", inversedBy="collections")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */
private $user;

private $date_created;

private $date_modified;

/* getters and setters are here*/
}

我正在使用 CollectionType 构建表单:

class CollectionType extends AbstractType{

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name','text')
        ->add('type', 'choice', array('choices' => array(
            Collection::STATUS_PRIVATE => 'Private',
            Collection::STATUS_PUBLIC => 'Public',
        )))
        ->add('save', 'submit', array('label' => 'Create Collection'))
    ;
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'MyMini\CollectionBundle\Entity\Collection'
    ));
}

public function getName()
{
    return 'mymini_collectionbundle_collection';
}
}

这是createAction,这里我尝试插入当前用户的用户名和创建实体的日期。我正在使用 FOSUserBundle 来管理应用程序用户:

 /**
 * @Route("/create-collection/", name="collection_create_collection")
 * @Template()
 */
public function createAction(Request $request)
{

    $collection = new Collection();

    $user = $this->get('security.token_storage')->getToken()->getUser();

    $username = $user->getUsername();

    $form = $this->createForm(new CollectionType(), $collection);

    $form->handleRequest($request);
    if ($form->isValid() && $form->isSubmitted()) {

        $em = $this->getDoctrine()->getManager();
        $collection->setUser($user);
        $collection->setDateCreated(new \DateTime());
        $em->persist($collection);
        $em->flush();

        return $this->redirectToRoute('collection_user_collections', array('username' => $username));
    }

    return array('collection'=>$collection, 'form' => $form->createView());
}

形式的树枝:

  <div class="collection-create">
    <h3 id="create-collection">Create a collection</h3>
    <a class="close-reveal-modal" aria-label="Close">&#215;</a>
    {{ form(form) }}
</div>

您收到的异常是正常的。您正在调用 createForm 方法,但未传递所有必要参数。正确的表单创建方式是:

$this->createForm(
    new CollectionType(),
    $collection,
    array(
        'action' => $this->generateUrl('collection_create_collection') ),
        'method' => 'PUT', // or 'POST'
    )
);