with texto strip_tags remove limpiar from eliminar allow all php symfony orm doctrine assert

php - texto - No se pudo encontrar el archivo al usar LifecycleCallbacks



string strip_tags (1)

Tengo un problema con la form validation en symfony2 .

En mi caso, el comando $form->isValid() da como resultado The file could not be found. a pesar de que proporciono un archivo durante el llenado del formulario

Además, la setFile función setFile en la documents entity lleva a la conclusión de que el valor del archivo está configurado correctamente. La función setFile y los resultados de print_r se proporcionan a continuación:

/** * Sets file. * * @param UploadedFile $file */ public function setFile(UploadedFile $file = null) { $this->file = $file; print_r($this->file); // [THIS IS FOR TEST] // check if we have an old image path if (is_file($this->getAbsolutePath())) { // store the old name to delete after the update $this->temp = $this->getAbsolutePath(); } else { $this->link = ''initial''; } }

resultado de print_r:

Symfony/Component/HttpFoundation/File/UploadedFile Object ( [test:Symfony/Component/HttpFoundation/File/UploadedFile:private] => [originalName:Symfony/Component/HttpFoundation/File/UploadedFile:private] => firefox.exe [mimeType:Symfony/Component/HttpFoundation/File/UploadedFile:private] => application/octet-stream [size:Symfony/Component/HttpFoundation/File/UploadedFile:private] => 338032 [error:Symfony/Component/HttpFoundation/File/UploadedFile:private] => 0 [pathName:SplFileInfo:private] => C:/wamp/tmp/php9DC3.tmp [fileName:SplFileInfo:private] => php9DC3.tmp )

Mi pregunta es por qué a pesar de que el archivo se proporciona correctamente, el validador de formulario falla?

Cuando comente una parte de mi función setFile() , comienza a funcionar y se produce una excepción de movimiento.

''

/** * Sets file. * * @param UploadedFile $file */ public function setFile(UploadedFile $file = null) { $this->file = $file; /*if (is_file($this->getAbsolutePath())) { // store the old name to delete after the update $this->temp = $this->getAbsolutePath(); } else { $this->link = ''initial''; }*/ }

Mi clase de formulario:

<?php namespace AppBundle/Form; use Symfony/Component/Form/AbstractType; use Symfony/Component/Form/FormBuilderInterface; use Symfony/Component/OptionsResolver/OptionsResolverInterface; class DocumentsType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add(''marker'') ->add(''document_date'', ''date'', array(''widget'' => ''single_text'', ''format'' => ''yyyy-MM-dd'')) ->add(''file'', ''file'') ->add(''notes'', ''text'', array(''required'' => "false")) ; }

Mi controlador en el cual la función is_valid resulta en resultado negativo:

/** * This code is aimed at checking if the book is choseen and therefore whether any further works may be carried out */ $session = new Session(); if(!$session->get("App_Books_Chosen_Lp")) return new RedirectResponse($this->generateUrl(''app_listbooks'')); // Authorization goes here $documents = new Documents(); $form = $this->createForm(new DocumentsType(), $documents); $form->add(''save'', ''submit'', array(''label'' => ''Dodaj dokument'')); $form->handleRequest($request); if ($form->isValid()) {

Mi clase de documentos:

<?php namespace AppBundle/Entity; use Doctrine/ORM/Mapping as ORM; use Symfony/Component/Validator/Constraints as Assert; use Symfony/Component/HttpFoundation/File/UploadedFile; /** * @ORM/Entity * @ORM/HasLifecycleCallbacks * @ORM/Table(name="Documents") */ class Documents { /** * @ORM/Column(type="integer") * @ORM/Id * @ORM/GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM/ManyToOne(targetEntity="Books", inversedBy="documents") * @ORM/JoinColumn(name="book_id", referencedColumnName="id") */ protected $book; /** * @ORM/Column(type="string", length=220) */ protected $marker; /** * @ORM/Column(type="date", length=220) */ protected $document_date; /** * @ORM/Column(type="string", length=220) * @Assert/File(maxSize="6000000") */ protected $link; /** * @ORM/Column(type="text") */ protected $notes; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set marker * * @param string $marker * @return Documents */ public function setMarker($marker) { $this->marker = $marker; return $this; } /** * Get marker * * @return string */ public function getMarker() { return $this->marker; } /** * Set document_date * * @param /DateTime $documentDate * @return Documents */ public function setDocumentDate($documentDate) { $this->document_date = $documentDate; return $this; } /** * Get document_date * * @return /DateTime */ public function getDocumentDate() { return $this->document_date; } /** * Set link * * @param string $link * @return Documents */ public function setLink($link) { $this->link = $link; return $this; } /** * Get link * * @return string */ public function getLink() { return $this->link; } /** * Set notes * * @param string $notes * @return Documents */ public function setNotes($notes) { $this->notes = $notes; return $this; } /** * Get notes * * @return string */ public function getNotes() { return $this->notes; } /** * Set book * * @param /AppBundle/Entity/Books $book * @return Documents */ public function setBook(/AppBundle/Entity/Books $book = null) { $this->book = $book; return $this; } /** * Get book * * @return /AppBundle/Entity/Books */ public function getBook() { return $this->book; } /* * ### FILE UPLOAD PROCESS ### */ /** * @Assert/File(maxSize="6000000") */ private $file; /** * Stores temporay path */ private $temp; /** * Sets file. * * @param UploadedFile $file */ public function setFile(UploadedFile $file = null) { $this->file = $file; print_r($this->file); // [THIS IS FOR TEST] // check if we have an old image path if (is_file($this->getAbsolutePath())) { // store the old name to delete after the update $this->temp = $this->getAbsolutePath(); } else { $this->link = ''initial''; } } /** * @ORM/PrePersist() * @ORM/PreUpdate() */ public function preUpload() { if (null !== $this->getFile()) { $this->link = $this->getFile()->guessExtension(); } } /** * Get file. * * @return UploadedFile */ public function getFile() { return $this->file; } public function getAbsolutePath() { return null === $this->link ? null : $this->getUploadRootDir().''/''.$this->id.''.''.$this->link; } public function getWebPath() { return null === $this->link ? null : $this->getUploadDir().''/''.$this->link; } protected function getUploadRootDir() { // the absolute directory where uploaded // documents should be saved return __DIR__.''/../../../web/''.$this->getUploadDir(); } protected function getUploadDir() { // get rid of the __DIR__ so it doesn''t screw up // when displaying uploaded doc/image in the view. return ''uploads/documents''; } /** * @ORM/PostPersist() * @ORM/PostUpdate() */ public function upload() { if (null === $this->getFile()) { return; } // check if we have an old image if (isset($this->temp)) { // delete the old image unlink($this->temp); // clear the temp image path $this->temp = null; } // you must throw an exception here if the file cannot be moved // so that the entity is not persisted to the database // which the UploadedFile move() method does $this->getFile()->move( $this->getUploadRootDir(), $this->id.''.''.$this->getFile()->guessExtension() ); $this->setFile(null); } /** * @ORM/PreRemove() */ public function storeFilenameForRemove() { $this->temp = $this->getAbsolutePath(); } /** * @ORM/PostRemove() */ public function removeUpload() { if (isset($this->temp)) { unlink($this->temp); } } }


He descubierto cuál es el problema. He marcado la columna "enlace" como un archivo y, por lo tanto, el validador fallaba porque el enlace era texto y no un archivo.

Mi código de enlace fue:

/** * @ORM/Column(type="string", length=220) * @Assert/File(maxSize="6000000") */ protected $link;

y la línea:

* @Assert/File(maxSize="6000000")

no debería estar allí.