Как загрузить изображение с помощью angular + symfony + vichuploaderBundle

Я пытаюсь загрузить изображение, используя angular и vichUploaderBundle для symfony.

Идея следующая,

У меня есть несколько вкладок, если вы нажмете на них, они отобразят разные формы, одна из них предназначена для загрузки файлов. Мой вопрос: как я могу загрузить изображение? Я имею в виду правильный путь. У меня есть файл html.twig с формой внутри (я использую движок twig). Предположим, у меня есть этот form.html.twig

 <form onsubmit="{{ path('upload-new-file') }}">
   <input type="file" id="someFile"/>
        <button> Upload Image </button>
 </form>

После того, как вы выбрали изображение, нажмите «Загрузить», это определит, какой URL-адрес соответствует загрузке-нового-файла (routing.yml) (например, будет выполнен некоторый запрос для загрузки файла)

Моя основная проблема заключается в том, что я запутался, потому что я программировал свои формы в php (используя createForm, form-> isvalid и т. д.), а затем отображал их с помощью twig, я также использую vichUploaderBundle. В ситуации, которую я описал, я не могу этого сделать, потому что у меня нет "формы" для ее отображения. ({{форма(форма)}}). Я не передаю форму в качестве параметра обычным способом (как в документации symfony; $this->render('someTemplate.html.twig',array ('form' => $form)))

Представьте, что у нас есть веб-страница с вкладками, и если вы щелкнете на одной из вкладок, она отобразит какую-то форму, одна из форм содержит ввод для загрузки, вы выбираете изображение и нажимаете на загрузку, что тогда? Напомним, что я использую angularjs, vichuploaderbundle, symfony и Doctrine в качестве ORM.

Заранее спасибо!


person Mauro Alvarez    schedule 16.03.2015    source источник


Ответы (1)


файл ветки

{{ form_start(form, {'attr': {'novalidate': 'novalidate'} }) }}
            <div class="form-group">
                <label>{{"news.lbl.file"|trans}}</label>
                {{form_widget(form.file)}}
                <lable>{{form_errors(form.file)}}</lable>
            </div>
     <div class="form-group">
                {{form_widget(form.submit)}}
            </div>
            {{ form_end(form)}}

загрузчик класса

<?php

namespace BaseBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\HttpFoundation\File\UploadedFile;

abstract class Uploader
{

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

    /**
     * @var string
     *
     * @ORM\Column(name="path", type="string", length=500,nullable=true)
     */
    protected $path;

    /**
     * Set imageUrl
     *
     * @param string $path
     * @return Category1
     */
    public function setPath($path)
    {
        $this->path = $path;

        return $this;
    }

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

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

    public function getAbsolutePath()
    {
        return null === $this->path ? null : $this->getUploadRootDir() . '/' . $this->path;
    }

    public function getWebPath()
    {
        return null === $this->path ? null : $this->getUploadDir() . '/' . $this->path;
    }

    protected function getUploadRootDir($docroot="web")
    {
// the absolute directory path where uploaded
// documents should be saved
        return __DIR__ . "/../../../../$docroot/" . $this->getUploadDir();
    }

    protected abstract function getUploadDir();

    /**
     * @Assert\File(maxSize="6000000")
     */
    protected $file;

    /**
     * Sets file.
     *
     * @param UploadedFile $file
     */
    public function setFile(UploadedFile $file = null)
    {
        $this->file = $file;
    }

    /**
     * Get file.
     *
     * @return UploadedFile
     */
    public function getFile()
    {
        return $this->file;
    }

    public function upload()
    {
        // the file property can be empty if the field is not required
        if (null === $this->getFile())
        {
            return;
        }
// use the original file name here but you should
// sanitize it at least to avoid any security issues
// move takes the target directory and then the
// target filename to move to
        $name = $this->getUploadDir() . "/" . time() . "-" . $this->getFile()->getClientOriginalName();
        $this->getFile()->move(
                $this->getUploadRootDir(), $name
        );
// set the path property to the filename where you've saved the file
        $this->path = $name;
// clean up the file property as you won't need it anymore
        $this->file = null;
    }

}

класс сущности

class entity extends Uploder
{

 protected function getUploadDir()
    {
         return 'dirctory name';
    }
}

и добавьте путь к файлу, затем удалите путь

person sajad    schedule 16.08.2015