1

自動的に更新される Product などのモデルに created_by フィールドが必要で、FOSUserBundle と Doctrine2 を使用しています。ユーザー ID を製品に入力する推奨される方法は何ですか?

製品モデルでそれを行うことはできますか? その方法がわかりません。どんな助けも素晴らしいでしょう。ありがとう!

モデルでこのようなことをしたいのですが、ユーザーIDを取得する方法がわかりません。

   /**
     * Set updatedBy
     *
     * @ORM\PrePersist
     * @ORM\PreUpdate
     * @param integer $updatedBy
     */
    public function setUpdatedBy($updatedBy=null)
    {
        if (is_null($updatedBy)) {
            $updatedBy = $user->id;
        }
        $this->updatedBy = $updatedBy;
    }
4

1 に答える 1

3

2 つのエンティティを関連付けたい製品にユーザーを関連付けるには: http://symfony.com/doc/current/book/doctrine.html#entity-relationships-associations

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="products")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 * You may need to use the full namespace above instead of just User if the
 * User entity is not in the same bundle e.g FOS\UserBundle\Entity\User
 * the example is just a guess of the top of my head for the fos namespace though
 */
protected $user;

自動更新フィールドについては、lifecyclecallbacks の後かもしれません: http://symfony.com/doc/current/book/doctrine.html#lifecycle-callbacks

/**
 * @ORM\Entity()
 * @ORM\HasLifecycleCallbacks()
 */
class Product
{
    /**
     * @ORM\PreUpdate
     */
    public function setCreatedValue()
    {
        $this->created = new \DateTime();
    }
}

編集

このディスカッションでは、エンティティでコンテナーを取得する方法について説明します。この場合、現在のユーザーを編集した製品に関連付ける場合は、security.context を取得してそこからユーザー ID を見つけることができます: https://groups.google. com/forum/?fromgroups#!topic/symfony2/6scSB0Kgds0

//once you have the container you can get the session
$user= $this->container->get('security.context')->getToken()->getUser();
$updated_at = $user->getId();

たぶんそれがあなたが求めているものですが、エンティティにコンテナを入れるのが良い考えかどうかはわかりませんが、製品コントローラーの更新アクションで製品にユーザーを設定するだけではいけません:

public function updateAction(){
   //....
   $user= $this->get('security.context')->getToken()->getUser();
   $product->setUser($user)
}
于 2012-06-12T07:47:54.933 に答える