2

私はSymfony2でブログを開発しています。私は教義に2つの実体を持っています:

  • 最初のものはArticlesと呼ばれ、ブログの記事(タイトル、テキスト、日付、ユーザー)のリストが含まれています。ここで、ユーザーは投稿の作成者です。
  • 2つ目はユーザーであり、実際にはユーザープロバイダーです。名前、メールアドレス
    などが含まれます。

ArticleエンティティのCRUDを次のように生成します。

php app/console doctrine:generate:crud

コントローラファイルに次のupdateActionが含まれています。

public function updateAction(Request $request, $id)
{
    $em = $this->getDoctrine()->getManager();        
    $entity = $em->getRepository('BlogBundle:Staticpage')->find($id);

    if (!$entity) {
        throw $this->createNotFoundException('Unable to find Staticpage entity.');
    }

    $deleteForm = $this->createDeleteForm($id);
    $editForm = $this->createForm(new EditStaticPageType(), $entity);
    $editForm->bind($request);

    if ($editForm->isValid()) {

        $em->persist($entity);            
        $em->flush();

        return $this->redirect($this->generateUrl('static_edit', array('id' => $id)));
    }

    return $this->render('BlogBundle:StaticsManagement:edit.html.twig', array(
        'entity'      => $entity,
        'edit_form'   => $editForm->createView(),
    ));
}

フォームを開いて新しい記事を作成したり、既存の記事を編集したりすると、ユーザーエンティティのユーザーを含むボックスが表示されます。両方のテーブルがエンティティ内でManyToOneアノテーションでリンクされているため、どちらかを選択できます。ただし、ユーザーを選択したくありません。Articlesテーブルに、すでにログインしているユーザーの名前(両方ともリンクされているため、実際にはID)を書き込み、使用可能なユーザーのリストを削除したいと思います。

すでにセキュリティ環境を設定していて正常に動作しているので、このコードはユーザーがログインしている場合にのみ実行されます。updateActionメソッドを編集する必要があると思いますが、方法がわかりません。

4

1 に答える 1

1

まず、Symfonyをまだ学習している場合は、CRUDジェネレーターを使用しないことをお勧めします。ある種のヘルパーを使用するよりも、最初は手動で行う方がよいでしょう。とにかく、私があなたの質問を理解しているなら、あなたは現在記録されているユーザーを記事ユーザーとして設定するべきです:

// Get logged user and set it as article user
$loggedUser = $this->get('security.context')->getToken()->getUser();
$entity->setUser($loggedUser);

// Create edit form
$editForm = $this->createForm(new EditStaticPageType(), $entity);

// Bind the request if POST
if('POST' === $request->getMethod()) {
    $editForm->bind($request);
}

// GET or invalid POST form
if('GET' === $request->getMethod() || !$editForm->isValid()) {
    return $this->render('BlogBundle:StaticsManagement:edit.html.twig', array(
        'entity'      => $entity,
        'edit_form'   => $editForm->createView(),
    ));
}

// POST with valid form so persist
$em->persist($entity);            
$em->flush();

user次に、記事編集フォームからフィールドを削除します。

于 2012-11-29T12:11:48.963 に答える