只显示登录用户创建的内容。Symfony2.8

Only show what logged in user has created.Symfony2.8

我在不同的包中有两个 table Post 实体是 link 到 table 用户实体。问题是每个登录的用户都可以看到所有产品,只允许(显示)登录用户创建的产品。

在我的 PostRepository.php 中,我添加了这段代码,但它不起作用:

<?php

namespace FLY\BookingsBundle\Entity;

use Doctrine\ORM\EntityRepository;

class PostRepository extends EntityRepository
{
    public function createAction()
    {
        $qb = $this->_em->createQueryBuilder();
        $qb->select('i')
            ->from('FLYBookingsBundle:Post', 'i')
            ->where('i.roles LIKE :roles')
            ->setParameter('roles', '%owner object%');

        return $qb->getQuery()->getResult();
    }
}

Post.php

<?php

namespace FLY\BookingsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Application\Sonata\UserBundle\Entity\User;

/**
 * Post
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="FLY\BookingsBundle\Entity\PostRepository")
 */
class Post
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     *
     *
     * @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User")
     * @ORM\JoinColumn(onDelete="CASCADE")
     */
    private $owner;



    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }


/**
     * @return User
     */
    public function getOwner()
    {
        return $this->owner;
    }

    /*
     * @param User $owner
     */
    public function setOwner(User $owner)
    {
        $this->owner = $owner;

        return $this;
    }
}

PostController.php

    public function createAction(Request $request)
    {
        $entity = new Post();
        $form = $this->createCreateForm($entity);
        $form->handleRequest($request);

        if ($form->isValid()) {
            $user = $this->getUser();
            $entity->setOwner($user);
            $em = $this->getDoctrine()->getManager();
            $em->persist($entity);
            $em->flush();

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

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

仅显示属于已登录用户的 posts:

  1. 每个 post 必须与一个用户相关联。在 Post 实体和 User 实体之间创建 ManyToOne 关系。请参阅此 documentation,因为您的代码太稀疏,无法猜测如何最好地提出解决方案。
  2. 您的显示操作需要限制为登录用户。参考这个documentation.
  3. 一旦您的表演动作受到限制,让用户参与其中:$user = $this->getUser();
  4. 有了$user,$this->getDoctrine()->getManager()->getRepository('FLYBookingsBundle:Post')->findBy(array('user' => $user ));