我在实体用户和实体合同之间建立了OnetoMany关系。 (用户可以拥有多个合同)
我有2个软件包,一个用于扩展fosuser(Userbundle),另一个用于所有其他ToolsBundle。
所以,我有一个用户列表,每个用户旁边都有链接。一个链接是合同,路由到同一个捆绑包中的Controller(toolsBundle),当我试图找到具有良好ID的合同时,它是告诉我
类MyApp \ UserBundle \ Entity \ Contract不存在 第194行的Symfony2 / vendor / doctrine / lib / Doctrine / ORM / Proxy / ProxyFactory.php
当然,合同在MyApp \ ToolsBundle \ Entity \ Contract
中我不知道出了什么问题......
<?php
namespace Furter\ToolsBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use MyApp\ToolsBundle\Entity\Contract;
use MyApp\ToolsBundle\Form\ContractForm;
class DefaultController extends Controller
{
public function editContractAction($id = null)
{
$message='';
$em = $this->container->get('doctrine')->getEntityManager();
if (isset($id))
{
$repository = $this->container->get('doctrine')
->getRepository('MyAppToolsBundle:Contract');
$contract = $repository->findBy(
array('id' => $id),
array('end' => 'ASC'));
if (!$contract)
{
$message='Aucun contrat trouvé';
}
}
else
{
$contract = new Contract();
}
$form = $this->container->get('form.factory')->create(new ContractForm(), $contract);
$request = $this->container->get('request');
if ($request->getMethod() == 'POST')
{
$form->bindRequest($request);
if ($form->isValid())
{
$em->persist($contract);
$em->flush();
if (isset($id))
{
$message='Contrat modifié avec succès !';
}
else
{
$message='Contrat ajouté avec succès !';
}
}
}
return $this->container->get('templating')->renderResponse(
'MyAppToolsBundle:Admin:contract.html.twig',
array(
'form' => $form->createView(),
'message' => $message,
));
}
}
奇怪的是,如果我在没有身份证的情况下进行编辑(为了创建合约,它的工作完美,只有当我找到匹配时...
我不知道这是否正确:
$contract = $repository->findBy(
array('id' => $id),
array('end' => 'ASC'));
但是我尝试使用简单的
并不重要$contract = $em->getRepository('MyAppToolsBundle:Contract')->find($id);
我有同样的错误。我被困了,我真的不知道为什么symfony认为该实体是我的另一个Bundle而不是我的工具包...
感谢。
编辑:我的合同类
<?php
namespace MyApp\ToolsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
*/
class Contract
{
/**
* @ORM\GeneratedValue
* @ORM\Id
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="MyApp\UserBundle\Entity\User", inversedBy="contracts")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
/**
* @ORM\Column(type="float")
* @Assert\NotBlank()
* @Assert\MinLength(2)
*/
private $rate;
/**
* @ORM\Column(type="date", nullable="true")
*/
private $start;
/**
* @ORM\Column(type="date", nullable="true")
*/
private $end;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set rate
*
* @param float $rate
*/
public function setRate($rate)
{
$this->rate = $rate;
}
/**
* Get rate
*
* @return float
*/
public function getRate()
{
return $this->rate;
}
/**
* Set start
*
* @param date $start
*/
public function setStart($start)
{
$this->start = $start;
}
/**
* Get start
*
* @return date
*/
public function getStart()
{
return $this->start;
}
/**
* Set end
*
* @param date $end
*/
public function setEnd($end)
{
$this->end = $end;
}
/**
* Get end
*
* @return date
*/
public function getEnd()
{
return $this->end;
}
/**
* Set user
*
* @param MyApp\ToolsBundle\Entity\User $user
*/
public function setUser(\MyApp\ToolsBundle\Entity\User $user)
{
$this->user = $user;
}
/**
* Get user
*
* @return MyApp\ToolsBundle\Entity\User
*/
public function getUser()
{
return $this->user;
}
}
答案 0 :(得分:1)
我找到了!当你在类之间建立关系时,symfony会添加一些函数(addContract等等)。它的命名空间错误....
/**
* Add contracts
*
* @param MyApp\UserBundle\Entity\Contract $contracts
*/
public function addContract(\MyApp\UserBundle\Entity\Contract $contracts)
{
$this->contracts[] = $contracts;
}
它应该是ToolsBundle
答案 1 :(得分:0)
确保您已在autoload.php和AppKernel.php中注册了捆绑包 - 我遇到了同样的问题,因为我没有将捆绑包添加到AppKernel ...