上传带有json(FosRestBundle)

时间:2017-06-20 10:15:43

标签: json symfony fosrestbundle

我正在开发一个项目,我最多编写一个Rest组件来将用户保存在数据库中。该组件还应将用户的照片保存在服务器上的文件夹中。我将参数作为Json发送到我的Rest Api。

我跟踪了tutorial一百次。但我仍然得到错误

  

文件“/home/herval/Desktop/zipf.png”不存在

尝试新File(pathOfTheUploadedFile)时。所以似乎Rest Api在本地查看文件。 当我尝试提供服务器上的文件时,它会移动文件而不是复制它。

请有人帮帮我吗?

以下是我的代码:

控制器:

/**
 * @Rest\Post("")
 */
public function mitgliedAnlegenRestAction(Request $request)
{

    $parametersAsArray = [];
    if ($content = $request->getContent()) {
        $parametersAsArray = json_decode($content, true);
    }

    $mitglied_param = $parametersAsArray['mitglied'];
    $token_param = $parametersAsArray['token'];

    $repository = $this->getDoctrine()
    ->getManager()
    ->getRepository('OrchesterRestBundle:Mitglied');

    $ersteller = $repository->findOneBy(array('token'=>$token_param));

    $ant = new Antwort();

    if($ersteller == NULL){

        $ant->setCode(202);
        $ant->setContent(NULL);
        return $ant;
    }else{

        if($ersteller->hasArt('ADMIN')){

            $repositoryG = $this->getDoctrine()
            ->getManager()
            ->getRepository('OrchesterRestBundle:Gruppe');

            $repositoryMG = $this->getDoctrine()
            ->getManager()
            ->getRepository('OrchesterRestBundle:MitgliedGruppe');

            $repositoryA = $this->getDoctrine()
            ->getManager()
            ->getRepository('OrchesterRestBundle:Art');

            $repositoryI = $this->getDoctrine()
            ->getManager()
            ->getRepository('OrchesterRestBundle:Instrument');

            $mitglied = new Mitglied($repositoryG);
            $id = $mitglied->setValueFromJson($mitglied_param);


            foreach($mitglied_param['arts'] as $artID){
                $art = $repositoryA->find($artID);
                if($art != NULL)
                    $mitglied->addArt($art);

            }
            foreach($mitglied_param['instrumente'] as $instrumentID){
                $instrument = $repositoryI->find($instrumentID);
                if($instrument != NULL)
                    $mitglied->addInstrumente($instrument);

            }

            if(($repository->findBy(array('username'=>$mitglied->getUsername())) != NULL
                    OR $repository->findBy(array('email'=>$mitglied->getEmail())) != NULL)
                    AND $request->isMethod('POST')){

                        $ant->setCode(302);
                        $ant->setContent(NULL);
                        return $ant;
            }else{


                $mitglied->setRegDatum(date_create('now'));


                if($mitglied_param['photo'] != ''){
                    $mitglied->setPhoto(
                            new File($mitglied_param['photo'])
                            );
                }
                $validator = $this->get('validator');
                $listErrors = $validator->validate($mitglied);
                if(sizeof($listErrors) == 0){
                    $auth = $this->container->get('orchester_rest.auth');
                    $passwort= $auth->generate_token(15);
                    $mitglied->setPwd(md5($passwort));
                    $mitglied->setMitgliedErsteller($ersteller);

                    //Upload photo
                    /** @var Symfony\Component\HttpFoundation\File\UploadedFile $file */

                    if($mitglied_param['photo'] != ''){
                        $file = $mitglied->getPhoto();
                        $fileName = md5(uniqid()).'.'.$file->guessExtension();
                        $file->move(
                                $this->getParameter('photos_directory'),
                                $fileName
                                );
                        $mitglied->setPhoto($fileName);
                    }

                    $em = $this->getDoctrine()->getManager();

                    if($request->isMethod('POST')){

                        $em->persist($mitglied);

                        //Envoyer Email
                        $message = \Swift_Message::newInstance('Registrierung')
                        ->setSubject('Registrierung')
                        ->setFrom($this->getParameter('email_system'))
                        ->setTo($mitglied->getEmail())
                        ->setBody($this->getParameter('salutation').", ".$mitglied->getVorname()." "
                                .strtoupper($mitglied->getNachname())."\n"
                                ."Dein Konto ist bereits erstellt. Da unten stehen deine Daten.\n\n"
                                ."\nVorname: ".ucfirst($mitglied->getVorname())
                                ."\nNachname: ".ucfirst($mitglied->getNachname())
                                ."\nGeburtsdatum: ".$mitglied->getGeburtsdatum()->format('d.m.Y')
                                ."\nEintrittsdatum: ".$mitglied->getEintrittsdatum()->format('d.m.Y')
                                ."\nRegistrierungsdatum: ".$mitglied->getRegDatum()->format('d.m.Y')." um ".$mitglied->getRegDatum()->format('H.i')."Uhr"
                                ."\n\n"
                                ."\nAdresse: ".ucfirst($mitglied->getStrasse())." ".$mitglied->getHausnummer()." ".$mitglied->getPlz()." ".ucfirst($mitglied->getStadt())
                                ."\n\n"
                                ."\nEmail: ".$mitglied->getEmail()
                                ."\nBenutzername: ".$mitglied->getUsername()
                                ."\nPasswort: ".$passwort
                                ."\n\n"
                                ."Aus Sicherheitsgründen empfehlen wir Ihnen, Ihr Passwort so früh wie möglich zu ändern."
                                ."\n\n"
                                ."\n".$this->getParameter('schluss')
                                ."\n".$this->getParameter('team'));
                        $this->get('mailer')->send($message);
                    }else{
                        $reg_mitglied = $repository->find($id);
                        if($reg_mitglied == NULL){
                            $ant->setCode(301);
                            $ant->setContent($mitglied);
                            return $ant;
                        }else{
                            $reg_mitglied->setValueFromMitglied($mitglied);
                            $em->flush();
                            $ant->setCode(100);
                            $ant->setContent($reg_mitglied);
                            return $ant;
                        }
                    }

                    $em->flush();

                    $ant->setCode(100);
                    $ant->setContent($mitglied);
                    return $ant;
                }else{

                    $ant->setCode(701);
                    $ant->setContent($listErrors);
                    return $ant;
                }
            }
        }else{

            $ant->setCode(601);
            $ant->setContent(NULL);
            return $ant;
        }
    }
}

实体

/**
 * Mitglied
 *
 * @ORM\Table(name="mitglied")
 * @ORM\Entity(repositoryClass="OrchesterRestBundle\Repository\MitgliedRepository")
 */

class Mitglied
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


/**
 * @var string
 *
 * @ORM\Column(name="username", type="string", length=15)
 * @Assert\Length(min=6, max=15)
 */
private $username;

/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", length=100)
 * @Assert\Email
 */
private $email;

/**
 * @var string
 *
 * @ORM\Column(name="nachname", type="string", length=100, nullable=true)
 * @Assert\Length(min=2, max=100)
 */
private $nachname;

/**
 * @var string
 *
 * @ORM\Column(name="vorname", type="string", length=100, nullable=true)
 * @Assert\Length(min=2, max=100)
 */
private $vorname;

/**
 * @var string
 *
 * @ORM\Column(name="pwd", type="string", length=255)
 * @Assert\Length(min=6, max=30)
 */
private $pwd;

/**
 * @var string
 *
 * @ORM\Column(name="photo", type="string", length=255, nullable=true)
 * @Assert\File(mimeTypes={ "image/jpeg", "image/pjpeg", "image/png", "image/gif" })
 */
private $photo;

/**
 * @var \Date
 *
 * @ORM\Column(name="eintrittsdatum", type="date", nullable=true)
 * @Assert\Date()
 */
private $eintrittsdatum;

/**
 * @var \Date
 *
 * @ORM\Column(name="geburtsdatum", type="date", nullable=true)
 * @Assert\Date()
 */
private $geburtsdatum;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="reg_datum", type="datetime")
 */
private $regDatum;

/**
 * @var string
 *
 * @ORM\Column(name="token", type="string", length=255, nullable=true)
 */
private $token;

/**
 * @var int
 *
 * @ORM\Column(name="plz", type="integer", nullable=true)
 */
private $plz;

/**
 * @var string
 *
 * @ORM\Column(name="stadt", type="string", length=100, nullable=true)
 * @Assert\Length(min=2, max=100)
 */
private $stadt;

/**
 * @var string
 *
 * @ORM\Column(name="strasse", type="string", length=100, nullable=true)
 * @Assert\Length(min=3, max=100)
 */
private $strasse;

/**
 * @var string
 *
 * @ORM\Column(name="hausnummer", type="string", length=15, nullable=true)
 * @Assert\Length(min=1, max=15)
 */
private $hausnummer;

/**
 * @ORM\ManyToOne(targetEntity="OrchesterRestBundle\Entity\Mitglied", cascade={"persist", "remove"})
 */
private $MitgliedErsteller;

/**
 * @ORM\ManyToMany(targetEntity="OrchesterRestBundle\Entity\Art", cascade={"persist", "remove"})
 */
private $arts;

/**
 * @ORM\ManyToMany(targetEntity="OrchesterRestBundle\Entity\Instrument", cascade={"persist", "remove"})
 */
private $instrumente;

/**
 * @ORM\OneToMany(targetEntity="OrchesterRestBundle\Entity\MitgliedGruppe",cascade={"persist", "remove"}, mappedBy="mitglied")
 * @ORM\JoinColumn(nullable=true)
 */
private $mitglied_gruppen;

/**
 * Constructor
 */
public function __construct($gruppeRepository = NULL)
{
    $this->arts = new \Doctrine\Common\Collections\ArrayCollection();
    $this->instrumente = new \Doctrine\Common\Collections\ArrayCollection();
    $this->mitglied_gruppen = new \Doctrine\Common\Collections\ArrayCollection();

    if($gruppeRepository != NULL){
        $gruppen = $gruppeRepository->findFromName('ALL');
        if($gruppen != NULL)
            if($gruppen[0] != NULL){
                    $mg = new MitgliedGruppe();
                    $mg->setBeitreten(true);
                    $mg->setGruppe($gruppen[0]);
                    $mg->setDatum(date_create('now'));
                    $mg->setMitglied($this);
                    $this->addMitgliedGruppen($mg);
            }
    }
}

/**
 * Add art
 *
 * @param \OrchesterRestBundle\Entity\Art $art
 *
 * @return Mitglied
 */
public function addArt(\OrchesterRestBundle\Entity\Art $art)
{
    if(!$this->arts->contains($art))
        $this->arts[] = $art;

    return $this;
}

/**
 * Remove art
 *
 * @param \OrchesterRestBundle\Entity\Art $art
 */
public function removeArt(\OrchesterRestBundle\Entity\Art $art)
{
    $this->arts->removeElement($art);
}

/**
 * Get arts
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getArts()
{
    return $this->arts;
}

/**
 * Set arts
 *
 * @param \Doctrine\Common\Collections\Collection $arts
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function setArts($arts)
{
    return $this->arts = $arts;
}

/**
 * Add instrumente
 *
 * @param \OrchesterRestBundle\Entity\Instrument $instrumente
 *
 * @return Mitglied
 */
public function addInstrumente(\OrchesterRestBundle\Entity\Instrument $instrumente)
{
    if(!$this->instrumente->contains($instrumente))
        $this->instrumente[] = $instrumente;

    return $this;
}

/**
 * Remove instrumente
 *
 * @param \OrchesterRestBundle\Entity\Instrument $instrumente
 */
public function removeInstrumente(\OrchesterRestBundle\Entity\Instrument $instrumente)
{
    $this->instrumente->removeElement($instrumente);
}

/**
 * Get instrumente
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getInstrumente()
{
    return $this->instrumente;
}

/**
 * Set instrumente
 *
 * @param \Doctrine\Common\Collections\Collection $instrumente
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function setInstrumente($instrumente)
{
    return $this->instrumente = $instrumente;
}

public function setValueFromJson($json_object){
    $this->setUsername($json_object['username']);
    $this->setEmail($json_object['email']);
    $this->setNachname($json_object['nachname']);
    $this->setVorname($json_object['vorname']);
    $this->setPwd($json_object['pwd']);


    $this->setEintrittsdatum(date_create($json_object['eintrittsdatum']));
    $this->setGeburtsdatum(date_create($json_object['geburtsdatum']));
    $this->setToken($json_object['token']);
    $this->setPlz($json_object['plz']);
    $this->setStadt($json_object['stadt']);
    $this->setStrasse($json_object['strasse']);
    $this->setHausnummer($json_object['hausnummer']);

    if(isset($json_object['id']))
        return $json_object['id'];
    return 0;
}

/**
 * Set mitgliedErsteller
 *
 * @param \OrchesterRestBundle\Entity\Mitglied $mitglied
 *
 * @return Mitglied
 */
public function setValueFromMitglied($mitglied){

    $this->setUsername($mitglied->username);
    $this->setEmail($mitglied->email);
    $this->setNachname($mitglied->nachname);
    $this->setVorname($mitglied->vorname);
    $this->setPwd($mitglied->pwd);
    $this->setPhoto($mitglied->photo);
    $this->setEintrittsdatum($mitglied->eintrittsdatum);
    $this->setGeburtsdatum($mitglied->geburtsdatum);
    $this->setRegDatum($mitglied->regDatum);
    $this->setToken($mitglied->token);
    $this->setPlz($mitglied->plz);
    $this->setStadt($mitglied->stadt);
    $this->setStrasse($mitglied->strasse);
    $this->setHausnummer($mitglied->hausnummer);

    $this->setArts($mitglied->getArts());
    $this->setInstrumente($mitglied->getInstrumente());
}

public function hasArt($g_art){
    $artArray = $this->arts->toArray();
    foreach($artArray as $art)
        if($art->getName() == $g_art)
            return true;
    return false;
}

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

/**
 * Set username
 *
 * @param string $username
 *
 * @return Mitglied
 */
public function setUsername($username)
{
    $this->username = $username;

    return $this;
}

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

/**
 * Set email
 *
 * @param string $email
 *
 * @return Mitglied
 */
public function setEmail($email)
{
    $this->email = $email;

    return $this;
}

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

/**
 * Set nachname
 *
 * @param string $nachname
 *
 * @return Mitglied
 */
public function setNachname($nachname)
{
    $this->nachname = $nachname;

    return $this;
}

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

/**
 * Set vorname
 *
 * @param string $vorname
 *
 * @return Mitglied
 */
public function setVorname($vorname)
{
    $this->vorname = $vorname;

    return $this;
}

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

/**
 * Set pwd
 *
 * @param string $pwd
 *
 * @return Mitglied
 */
public function setPwd($pwd)
{
    $this->pwd = $pwd;

    return $this;
}

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

/**
 * Set photo
 *
 * @param string $photo
 *
 * @return Mitglied
 */
public function setPhoto($photo)
{
    $this->photo = $photo;

    return $this;
}

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

/**
 * Set eintrittsdatum
 *
 * @param \DateTime $eintrittsdatum
 *
 * @return Mitglied
 */
public function setEintrittsdatum($eintrittsdatum)
{
    $this->eintrittsdatum = $eintrittsdatum;

    return $this;
}

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

/**
 * Set geburtsdatum
 *
 * @param \DateTime $geburtsdatum
 *
 * @return Mitglied
 */
public function setGeburtsdatum($geburtsdatum)
{
    $this->geburtsdatum = $geburtsdatum;

    return $this;
}

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

/**
 * Set regDatum
 *
 * @param \DateTime $regDatum
 *
 * @return Mitglied
 */
public function setRegDatum($regDatum)
{
    $this->regDatum = $regDatum;

    return $this;
}

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

/**
 * Set token
 *
 * @param string $token
 *
 * @return Mitglied
 */
public function setToken($token)
{
    $this->token = $token;

    return $this;
}

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

/**
 * Set plz
 *
 * @param integer $plz
 *
 * @return Mitglied
 */
public function setPlz($plz)
{
    $this->plz = $plz;

    return $this;
}

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

/**
 * Set stadt
 *
 * @param string $stadt
 *
 * @return Mitglied
 */
public function setStadt($stadt)
{
    $this->stadt = $stadt;

    return $this;
}

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

/**
 * Set strasse
 *
 * @param string $strasse
 *
 * @return Mitglied
 */
public function setStrasse($strasse)
{
    $this->strasse = $strasse;

    return $this;
}

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

/**
 * Set hausnummer
 *
 * @param string $hausnummer
 *
 * @return Mitglied
 */
public function setHausnummer($hausnummer)
{
    $this->hausnummer = $hausnummer;

    return $this;
}

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

/**
 * Set mitgliedErsteller
 *
 * @param \OrchesterRestBundle\Entity\Mitglied $mitgliedErsteller
 *
 * @return Mitglied
 */
public function setMitgliedErsteller(\OrchesterRestBundle\Entity\Mitglied $mitgliedErsteller = null)
{
    $this->MitgliedErsteller = $mitgliedErsteller;

    return $this;
}

/**
 * Get mitgliedErsteller
 *
 * @return \OrchesterRestBundle\Entity\Mitglied
 */
public function getMitgliedErsteller()
{
    return $this->MitgliedErsteller;
}

/**
 * Add mitgliedGruppen
 *
 * @param \OrchesterRestBundle\Entity\MitgliedGruppe $mitgliedGruppen
 *
 * @return Mitglied
 */
public function addMitgliedGruppen(\OrchesterRestBundle\Entity\MitgliedGruppe $mitgliedGruppen)
{
    $this->mitglied_gruppen[] = $mitgliedGruppen;

    return $this;
}

/**
 * Remove mitgliedGruppen
 *
 * @param \OrchesterRestBundle\Entity\MitgliedGruppe $mitgliedGruppen
 */
public function removeMitgliedGruppen(\OrchesterRestBundle\Entity\MitgliedGruppe $mitgliedGruppen)
{
    $this->mitglied_gruppen->removeElement($mitgliedGruppen);
}

/**
 * Get mitgliedGruppen
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getMitgliedGruppen()
{
    return $this->mitglied_gruppen;
}

}

1 个答案:

答案 0 :(得分:0)

您可以从请求中访问该文件,并按以下方式调整场景的数据:

/**
 * @Rest\Post("")
 */
public function mitgliedAnlegenRestAction(Request $request)
{

    $parameters = $request->request->all();
    $parametersAsArray = json_decode($content, true);

    $filesAsArray = $request->files->all();

    // You could access to a file uploaded in the file attribute as example
    // @var UploadedFile file */
    $file = $filesAsArray['file'];

...

希望这个帮助