我知道有很多人要求这个错误,但我试图找到我的错误,但我不能。
首先,我使用FOSUSERBUNDLE来管理我的用户。我需要管理三个不同的用户,所以我从fosuserbundle扩展了主要实体用户,我创建了另外3个实体,这些实体的字段是对我的用户实体的引用。直到这项工作正常。
现在,我有一个名为SolicituIngreso.php的实体,它可以改变这3个不同的用户。我告诉你下面的实体:
class Usuario extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
}
/** @ORM\column(type="string", length=255,nullable=true)
*
*@Assert\NotBlank(message="Por favor ingrese su nombre.")
*@Assert\Length(
* min=1,
* max=255,
* minMessage="El nombre es demasiado corto.",
* maxMessage="El nombre es demasiado largo.")
**/
protected $nombre;
/** @ORM\column(type="string", length=255,nullable=true)
*
*@Assert\NotBlank(message="Por favor ingrese su apellido.")
** @Assert\Length(
* min=1,
* max=255,
* minMessage="El nombre es demasiado corto.",
* maxMessage="El nombre es demasiado largo.")
**/
protected $apellido;
...
我的一个实体引用我的Usuario.php的示例:
class EncargadoBodega
{
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="GestionResiduos\UsuarioBundle\Entity\Usuario", cascade={"all"}, inversedBy="encargadoBodega")
* @ORM\JoinColumn(name="encargadoBodega_id", referencedColumnName="id")
*/
protected $encargadoBodega;
和其他领域有吸气剂和制定者。
最后这是我的实体SolicitudIngreso.php:
class SolicitudIngreso
{
/**
*@ORM\Id
*@ORM\column(type="integer")
*@ORM\GeneratedValue(strategy="AUTO")
*/
protected $numeroSolicitud;
/**
* @ORM\ManyToOne(targetEntity="GestionResiduos\ResiduoBundle\Entity\Bodega", cascade={"all"}, inversedBy="solicitudesIngreso")
* @ORM\JoinColumn(name="bodegaAsociadaIngreso_id", referencedColumnName="idBodega")
*/
protected $bodegaAsociadaIngreso;
/**
* @ORM\ManyToOne(targetEntity="GestionResiduos\UsuarioBundle\Entity\OperarioBodega", cascade={"all"}, inversedBy="solicitudesIngresoOpB")
* @ORM\JoinColumn(name="operarioBodega_id", referencedColumnName="userOperarioBodega_id")
*/
protected $operarioBodega;
/**
* @ORM\ManyToOne(targetEntity="GestionResiduos\UsuarioBundle\Entity\OperarioGenerador", cascade={"all"}, inversedBy="solicitudesIngresoOpG")
* @ORM\JoinColumn(name="operarioGenerador_id", referencedColumnName="userGenerador_id")
*/
protected $operarioGenerador;
/**
* @ORM\column(type="text", nullable=true)
*/
protected $obsEncargadoBodega;
我在这个实体中有另外一个字段,但我认为如果我为一个实体求解,我可以做另一个实体。
顺便说一句,在我的控制器中,我只向你展示了我遇到问题的两种方法:class DefaultController extends Controller
{
public function crearSolicitudIngresoAction(Request $request)
{
$solicitudIngreso = new SolicitudIngreso();
$ingresoResiduo= new IngresoResiduo();
$userManager = $this->container->get('fos_user.user_manager');
$temp = $userManager->findUserByUsername($this->getUser());
$em = $this->getDoctrine()->getManager();
$numeroOperario= $temp->getId();
$operarioGenerador= $em->getRepository('UsuarioBundle:OperarioGenerador')->findOperarioGenerador($numeroOperario);
$formulario = $this->createForm(new IngresoResiduoType(), $ingresoResiduo);
$dateTime = new \DateTime();
$residuos = $em->getRepository('ResiduoBundle:Residuo')->findResiduoCampos();
$formulario->handleRequest($request);
if($formulario->isValid())
{
$bandera=$solicitudIngreso->getEstadoSolicitud();
if(($bandera != ""))
{
return $this->redirect($this->generateUrl('solicitud_ingreso_pendientes_opg'));
}
$solicitudIngreso->setEstadoSolicitud("AOR"); //ADD OTRO RESIDUO
$solicitudIngreso->setFechaSolicitud($dateTime);
$solicitudIngreso->setObsOperarioGenerador($formulario->get('numeroSolicitud')['obsOperarioGenerador']->getData());
$solicitudIngreso->setDepartamentoGenerador($formulario->get('numeroSolicitud')['departamentoGenerador']->getData());
$formulario->get('numeroSolicitud')['obsOperarioGenerador']->getData();
$em->persist($solicitudIngreso);
//$solicitudIngreso->setEstadoSolicitud("AOR"); //Espera Aprobación Ingreso
$em->flush();
$numeroSolicitud = $solicitudIngreso->getNumeroSolicitud();
$ingresoResiduo->setNumeroSolicitud($solicitudIngreso);
$em->persist($ingresoResiduo);
$em->flush();
if ($operarioGenerador) {
$solicitudIngreso->setOperarioGenerador($operarioGenerador);
$em->persist($solicitudIngreso);
$em->flush();
}
/**********new code for manage more than one residuo**************/
if ($formulario->get('addotro')->isClicked()){//acá meto un render y le paso la variable con el residuo a ingresar.
return $this->redirect($this->generateUrl(
'add_residuo_solicitud', array(
'idsolicitud' => $numeroSolicitud
)));
}
$solicitudIngreso->setEstadoSolicitud("EAI"); //Espera Aprobación Ingreso
$em->persist($solicitudIngreso);
$em->flush();
return $this->redirect($this->generateUrl(
'detalle_pendiente_opg', array(
'id' => $numeroSolicitud
)));
}
return $this->render('SolicitudIngresoBundle:Default:crearSolicitudIngreso.html.twig', array(
'formulario' => $formulario->createView(),
'residuos' => $residuos
));
}
public function addResiduoIngresoSolicitudIngresoAction(Request $request, $idsolicitud){
$numeroSolicitud =$idsolicitud;
$ingresoResiduo= new IngresoResiduo();
$em = $this->getDoctrine()->getManager();
$formulario = $this->createForm(new AddNuevoResiduoType(), $ingresoResiduo);
$formulario->handleRequest($request);
if($formulario->isValid())
{
$solicitudIngreso=$em->getRepository('SolicitudIngresoBundle:SolicitudIngreso')->findSolicitudIngreso($numeroSolicitud);
$ingresoResiduo->setNumeroSolicitud($solicitudIngreso);
$em->persist($ingresoResiduo);
$em->flush();
if ($formulario->get('addotro')->isClicked()) {
return $this->redirect($this->generateUrl(
'add_residuo_solicitud', array(
'idsolicitud' => $numeroSolicitud
)));
}
$em->persist($solicitudIngreso);
$em->flush();
return $this->redirect($this->generateUrl(
'detalle_pendiente_opg', array(
'id' => $numeroSolicitud
)));
}
$residuosAdd= $em->getRepository('SolicitudIngresoBundle:IngresoResiduo')->findIngresoResiduos($idsolicitud);
$residuos = $em->getRepository('ResiduoBundle:Residuo')->findResiduoCampos();
return $this->render('SolicitudIngresoBundle:Default:addResiduoSolicitudIngreso.html.twig', array(
'formulario' => $formulario->createView(),
'residuosincluidos' => $residuosAdd,
'id' => $idsolicitud,
'residuos' => $residuos
));
}
我正在使用alter entity solicitudIngreso.php的表单。
当我尝试坚持使用函数
时,问题就出现了问题addResiduoIngresoSolicitudIngresoAction
并且翻出下一个错误:
ContextErrorException:警告:spl_object_hash()期望参数1为object,字符串在C:\ xampp \ htdocs \ Gestionresiduospel \ vendor \ doctrine \ orm \ lib \ Doctrine \ ORM \ UnitOfWork.php第1602行中给出
我认为如果我添加我的表单可能会对您有所帮助:在这种情况下,我称之为addotro,此表单为 AddNuevoResiduoType 。所以,当我再次拨打按钮addotro或尝试按钮crear Trowing错误。
我想这可能是因为我的3个实体引用了Usuario实体。但我无法解决错误。我真的希望你能帮助我们。
答案 0 :(得分:0)
你好我想你需要看一下函数addResiduoIngresoSolicitudIngresoAction
在这一行
$solicitudIngreso=$em->getRepository('SolicitudIngresoBundle:SolicitudIngreso')->findSolicitudIngreso($numeroSolicitud);
我不确定存储库函数中发生了什么,但是您可能会返回一个字符串,其中对象IngresoResiduo
期望是一个整数并尝试保留它。
或者此变量可以是字符串$numeroSolicitud =$idsolicitud;
,然后设置为doctrine期望为整数的属性。
您可以通过添加验证来避免这种情况。您还可以尝试缩短方法名称和变量,或者将某些逻辑移动到服务中以使代码更具可读性。通过它需要更长的时间。
希望我的建议有所帮助。如果你解决了这个问题,请告诉我!
答案 1 :(得分:0)
我终于解决了我的问题。好吧,我检查我的实体,发现在我的实体中,我正在检查字段operarioBodega和operarioGenerador的级联验证,所以我删除了这个检查,一切正常。所以我认为这是因为当我要求getId()为我的operariogenerador获取我的id时,我得到一个字符串原因是fosuserbundle,它使用整数但我的operariogenerador打印用户名。我希望这可能对另一个有这个问题的人有用。超