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