2017-12-23 30 views
-2

私は初心者です。昨日私はsymfonyのツールを生成するようにテストしました:doctrine:crud。私は多くのことを私が今よりはるかに簡単に行うことができます。場合は、私が見つけた、生成されたコード分析した後です:createFormにTaskTypeが必要なのはなぜですか?

$editForm = $this->createForm('AppBundle\Form\TaskType', $task); 

を私は、公式ドキュメントといくつかのチュートリアルを読んでいくつかの時間を費やすが、私は私の疑問のために正確な答えを見つけることができません。 この部分が必要な理由:AppBundle\Form\TaskType? 何が含まれるべきですか?フォームを構築するTaskTypeファイルに移動することができます。

$builder->add('name')->add('datetime'); 

しかし、それだけのために分離されたファイルを作成する必要はありません。 TaskTypeファイルの使用を避ける方法はありますか?私はこのようにタスクエンティティの編集フォームを実行しようとしました:

$editForm = $this->createForm($task); 

しかし、それは間違った方法です。 よろしく、 ルカシュ

EDIT#1 -----タスクエンティティ用のコントローラeditAction

/** 
* Displays a form to edit an existing task entity. 
* 
* @Route("/{id}/edit", name="task_edit") 
* @Method({"GET", "POST"}) 
*/ 
public function editAction(Request $request, Task $task) 
{ 
    $deleteForm = $this->createDeleteForm($task); 
    $editForm = $this->createForm('AppBundle\Form\TaskType', $task); 
    $editForm->handleRequest($request); 

    if ($editForm->isSubmitted() && $editForm->isValid()) { 
     $this->getDoctrine()->getManager()->flush(); 

     return $this->redirectToRoute('task_edit', array('id' => $task->getId())); 
    } 

    return $this->render('task/edit.html.twig', array(
     'task' => $task, 
     'edit_form' => $editForm->createView(), 
     'delete_form' => $deleteForm->createView(), 
    )); 
} 

とTaskType属性

class TaskType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name')->add('datetime'); 
    } 

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

    /** 
    * {@inheritdoc} 
    */ 
    public function getBlockPrefix() 
    { 
     return 'appbundle_task'; 
    } 


} 
+0

ポストCRUDを生成するときに、フォームと完全なコントローラを作成の内容は、私はあなたよりも、同じバージョンを使用していませんでしたし、私の場合は私が持っていましたアクションごとにフォームメソッドを作成 – albert

+0

コードが追加されました。バージョン3.3.10 – Lukaszy

+3

Symfonyへようこそ。最善の策は、ドキュメントの[フォームの例](https://symfony.com/doc/current/forms.html)のいくつかを使って作業することです。ドキュメントのバージョン番号(右上の角)がSymfonyのバージョンと一致することを確認してください。一度フォームの基本的な理解を持っていれば、荒れ果てたものがより意味をなさないでしょう。 – Cerad

答えて

1

これは、あなたが呼び出しているコントローラのメソッドです。

フレームワークコントローラは、複数のsymfonyサービスのファサードです。それらの1つはFormFactoryサービスです。それが実装されているフォームタイプ(必須)

  • データ(オプション)
  • フォームのオプション(オプション)
  • はCreateFormに()

    1. :あなたが必要なフォームを作成するには

      親クラスではすべての種類のフォームと実装で汎用的です。

      のSymfony \バンドル\ FrameworkBundle \コントローラ\コントローラー

      /** 
          * Creates and returns a Form instance from the type of the form. 
          * 
          * @param string|FormTypeInterface $type The built type of the form 
          * @param mixed     $data The initial data for the form 
          * @param array     $options Options for the form 
          * 
          * @return Form 
          */ 
          public function createForm($type, $data = null, array $options = array()) 
          { 
           return $this->container->get('form.factory')->create($type, $data, $options); 
          } 
      
    +0

    ありがとうございます。この定義はどこで見つかりましたか?私はhttps://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/FrameworkBundle/Controller/ControllerTrait.php#L304しか見つけられませんでしたが、コメントはあまり利用できません。 – Lukaszy

    +0

    私はまだ開いているプロジェクトのSymfony 2.7にいます – albert

    +0

    フォームファクトリインターフェイスを確認してください:https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Form/FormFactoryInterface.php# L32 – albert

    関連する問題