[英]How to create user in Symfony with sfDoctrineGuardPlugin?
[英]how to create an object with a user attached in symfony
我正在嘗試創建當前經過身份驗證的用戶創建的產品。
用戶與產品實體有關系,我需要為用戶提供一種與其相關聯的用戶創建產品的方式。
我正在學習本教程 ,但沒有涉及如何與當前用戶一起存儲產品
這就是我到目前為止
ProductController.php
public function create(Request $request)
{
$category = new Category();
$category->setName($request->get('category'));
$user = new User();
// how would i get the current user and set it to a product.
$entityManager = $this->getDoctrine()->getManager();
$product = new Product();
$product->setName($request->get('title'));
$product->setPrice($request->get('price'));
$product->setDescription($request->get('description'));
$product->setCategory($category);
$entityManager->persist($category);
$entityManager->persist($product);
$entityManager->flush();
return $this->redirectToRoute('products');
}
我應該使用這種方法還是嘗試其他方法?
Entity \\ User.php
public function addProduct(Product $product): self
{
if (!$this->products->contains($product)) {
$this->products[] = $product;
$product->setUser($this);
}
return $this;
}
Entity \\ Product.php
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=190)
*/
private $name;
/**
* @ORM\Column(type="integer")
*/
private $price;
/**
* @ORM\Column(type="text")
*/
private $description;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Category", inversedBy="products")
* @ORM\JoinColumn(nullable=false)
*/
private $category;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="products")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getPrice(): ?int
{
return $this->price;
}
public function setPrice(int $price): self
{
$this->price = $price;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(string $description): self
{
$this->description = $description;
return $this;
}
public function getCategory(): ?Category
{
return $this->category;
}
public function setCategory(?Category $category): self
{
$this->category = $category;
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
}
如我所見,您的關系通過addProduct()
方法工作,但是在您的控制器中,您不會在任何地方調用addProduct()
。
嘗試跟隨...
$entityManager->persist($user) // you forgot to persist a new User
$entityManager->persist($category);
$entityManager->persist($product);
$user->addProduct(product)
$entityManager->flush(); // now try to flush...
題外話和一些建設性的批評
僅通過查看您的控制器,我就假定您正在使用Symfony,尤其是在學習原理方面。 如果是這樣,請考慮以下。 如果沒有,那就忽略它;)
Product->user
重命名為Product->createdBy
此命名約定使其更加明顯。 inversedBy
和mappedBy
部分在您的產品<->用戶關系中)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.