3

私はsymfony 2.5プロジェクトに取り組んでおり、リバースエンジニアリング(doctrine:mapping:import)を使用しました。データベースで予約をするために患者を保存するフォームにデータトランスフォーマーが必要ですが、ユーザーが書き込む必要があります彼の識別番号 (フィールド名はnumeroRegistro)。私はそれについて読んで実装しましたが、作成の時点で問題が発生しています。

これは私のタイプです:

<?php

namespace frontend\citasBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use frontend\citasBundle\Form\DataTransformer\IssueToNumberTransformer;

class CitasType extends AbstractType
{
/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $entityManager = $options['em'];
    $transformer = new IssueToNumberTransformer($entityManager);


    $builder
        ->add('estado')
        ->add('tipo')
        ->add('encargado')
        ->add('eps')
        ->add('fechaInicio')
        ->add('fechaFin')
        ->add('comentario')
        ->add('fechaAsignacion')
        ->add('usuarioAsigna')
        ->add('paciente','text')->addModelTransformer($transformer)
        ->add('consultorios')
    ;
}

/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'frontend\citasBundle\Entity\Citas'
    ))
        ->setRequired(array(
        'em',
    ))
    ->setAllowedTypes(array(
        'em' => 'Doctrine\Common\Persistence\ObjectManager',
    ));

}

/**
 * @return string
 */
public function getName()
{
    return 'frontend_citasbundle_citas';
}
}

これは datatransformer です:

<?php

// src/Acme/TaskBundle/Form/DataTransformer/IssueToNumberTransformer.php
namespace frontend\citasBundle\Form\DataTransformer;
use Symfony\Component\Form\DataTransformerInterface;
use Symfony\Component\Form\Exception\TransformationFailedException;
use Doctrine\Common\Persistence\ObjectManager;
//use frontend\citasBundle\Entity\Issue;

class IssueToNumberTransformer implements DataTransformerInterface
{
/**
 * @var ObjectManager
 */
private $om;

/**
 * @param ObjectManager $om
 */
public function __construct(ObjectManager $om)
{
    $this->om = $om;
}

/**
 * Transforms an object (issue) to a string (number).
 *
 * @param  Issue|null $issue
 * @return string
 */
public function transform($issue)
{
    if (null === $issue) {
        return "";
    }

    return $issue->getId();
}

/**
 * Transforms a string (number) to an object (issue).
 *
 * @param  string $number
 *
 * @return Issue|null
 *
 * @throws TransformationFailedException if object (issue) is not found.
 */
public function reverseTransform($number)
{
    if (!$number) {
        return null;
    }

    $issue = $this->om
        ->getRepository('frontendpacienteBundle:Paciente')
        ->findOneBy(array('numeroRegistro' => $number))
    ;

    if (null === $issue) {
        throw new TransformationFailedException(sprintf(
            'An issue with number "%s" does not exist!',
            $number
        ));
    }

    return $issue;
}
}

そして最後に私のエンティティ:

<?php

namespace frontend\citasBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
  * Citas
 */
class Citas
{
/**
 * @var integer
 */
private $id;

/**
 * @var boolean
 */
private $estado;

/**
 * @var string
 */
private $tipo;

/**
 * @var integer
 */
private $encargado;

/**
 * @var string
 */
private $eps;

/**
 * @var \DateTime
 */
private $fechaInicio;

/**
 * @var \DateTime
 */
private $fechaFin;

/**
 * @var string
 */
private $comentario;

/**
 * @var \DateTime
 */
private $fechaAsignacion;

/**
 * @var string
 */
private $usuarioAsigna;

/**
 * @var \frontend\citasBundle\Entity\Paciente
 */
private $paciente;

/**
 * @var \frontend\citasBundle\Entity\Consultorios
 */
private $consultorios;


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

/**
 * Set estado
 *
 * @param boolean $estado
 * @return Citas
 */
public function setEstado($estado)
{
    $this->estado = $estado;

    return $this;
}

/**
 * Get estado
 *
 * @return boolean 
 */
public function getEstado()
{
    return $this->estado;
}

/**
 * Set tipo
 *
 * @param string $tipo
 * @return Citas
 */
public function setTipo($tipo)
{
    $this->tipo = $tipo;

    return $this;
}

/**
 * Get tipo
 *
 * @return string 
 */
public function getTipo()
{
    return $this->tipo;
}

/**
 * Set encargado
 *
 * @param integer $encargado
 * @return Citas
 */
public function setEncargado($encargado)
{
    $this->encargado = $encargado;

    return $this;
}

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

/**
 * Set eps
 *
 * @param string $eps
 * @return Citas
 */
public function setEps($eps)
{
    $this->eps = $eps;

    return $this;
}

/**
 * Get eps
 *
 * @return string 
 */
public function getEps()
{
    return $this->eps;
}

/**
 * Set fechaInicio
 *
 * @param \DateTime $fechaInicio
 * @return Citas
 */
public function setFechaInicio($fechaInicio)
{
    $this->fechaInicio = $fechaInicio;

    return $this;
}

/**
 * Get fechaInicio
 *
 * @return \DateTime 
 */
public function getFechaInicio()
{
    return $this->fechaInicio;
}

/**
 * Set fechaFin
 *
 * @param \DateTime $fechaFin
 * @return Citas
 */
public function setFechaFin($fechaFin)
{
    $this->fechaFin = $fechaFin;

    return $this;
}

/**
 * Get fechaFin
 *
 * @return \DateTime 
 */
public function getFechaFin()
{
    return $this->fechaFin;
}

/**
 * Set comentario
 *
 * @param string $comentario
 * @return Citas
 */
public function setComentario($comentario)
{
    $this->comentario = $comentario;

    return $this;
}

/**
 * Get comentario
 *
 * @return string 
 */
public function getComentario()
{
    return $this->comentario;
}

/**
 * Set fechaAsignacion
 *
 * @param \DateTime $fechaAsignacion
 * @return Citas
 */
public function setFechaAsignacion($fechaAsignacion)
{
    $this->fechaAsignacion = $fechaAsignacion;

    return $this;
}

/**
 * Get fechaAsignacion
 *
 * @return \DateTime 
 */
public function getFechaAsignacion()
{
    return $this->fechaAsignacion;
}

/**
 * Set usuarioAsigna
 *
 * @param string $usuarioAsigna
 * @return Citas
 */
public function setUsuarioAsigna($usuarioAsigna)
{
    $this->usuarioAsigna = $usuarioAsigna;

    return $this;
}

/**
 * Get usuarioAsigna
 *
 * @return string 
 */
public function getUsuarioAsigna()
{
    return $this->usuarioAsigna;
}

/**
 * Set paciente
 *
 * @param \frontend\citasBundle\Entity\Paciente $paciente
 * @return Citas
 */
public function setPaciente(\frontend\citasBundle\Entity\Paciente $paciente = null)
{
    $this->paciente = $paciente;

    return $this;
}

/**
 * Get paciente
 *
 * @return \frontend\citasBundle\Entity\Paciente 
 */
public function getPaciente()
{
    return $this->paciente;
}

/**
 * Set consultorios
 *
 * @param \frontend\citasBundle\Entity\Consultorios $consultorios
 * @return Citas
 */
public function setConsultorios(\frontend\citasBundle\Entity\Consultorios $consultorios = null)
{
    $this->consultorios = $consultorios;

    return $this;
}

/**
 * Get consultorios
 *
 * @return \frontend\citasBundle\Entity\Consultorios 
 */
public function getConsultorios()
{
    return $this->consultorios;
}
}

それで十分だと思いましたが、送信すると次のエラーが発生します。

Catchable Fatal Error: Argument 1 passed to frontend\citasBundle\Entity\Citas::setPaciente() must           be an instance of frontend\citasBundle\Entity\Paciente, string given, called in C:\xampp\htdocs\genoma\vendor\symfony\symfony\src\Symfony\Component\PropertyAccess\PropertyAccessor.php on line 438 and defined in C:\xampp\htdocs\genoma\src\frontend\citasBundle\Entity\Citas.php line   296

データ トランスフォーマーの構成が不適切ですか? データベース経由で挿入されたレジスタを編集しようとすると、次のようになります。

The form's view data is expected to be an instance of class frontend\citasBundle\Entity\Citas, but is a(n) string. You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms a(n) string to an instance of frontend\citasBundle\Entity\Citas.

フォームのテキスト フィールドに患者の ID 番号を入力する必要があるため、datatransformer を使用しました。レジスターを編集するときも同様です。

**私はこのことに夢中になっています。今までお世話になりました。**

4

1 に答える 1