Helpex - Trao đổi & giúp đỡ Đăng nhập
5

Tôi đang cố gắng tải lên một hình ảnh bằng cách sử dụng angle và vichUploaderBundle cho symfony.

Ý tưởng như sau,

Tôi có một số tab, nếu bạn nhấp vào chúng, chúng sẽ hiển thị các biểu mẫu khác nhau, một trong số chúng là để tải tệp lên. Câu hỏi của tôi là, Làm thế nào tôi có thể tải lên hình ảnh? Ý tôi là cách chính xác. Tôi có một tệp html.twig, với một biểu mẫu bên trong (tôi đang sử dụng bao gồm công cụ twig). Giả sử tôi có biểu mẫu này.html.twig

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

Khi bạn đã chọn hình ảnh, hãy nhấp vào Tải lên, thao tác này sẽ xác định URL nào khớp với tệp upload-new-file (routing.yml) (ví dụ: Nó sẽ thực hiện một số truy vấn để tải tệp lên)

Vấn đề chính của tôi là tôi cảm thấy bối rối vì tôi đã lập trình các biểu mẫu của mình trong php (sử dụng createForm, form-> isvalid, v.v.) và sau đó kết xuất chúng bằng twig, tôi cũng đang sử dụng vichUploaderBundle. Trong tình huống mà tôi đã mô tả, tôi không thể làm điều đó, bởi vì tôi không có "biểu mẫu" để hiển thị nó. ({{form (biểu mẫu)}}). Tôi không truyền biểu mẫu dưới dạng tham số theo cách thông thường (như trong symfony docs; $ this-> render ('someTemplate.html.twig', array ('form' => $ form)))

Hãy tưởng tượng rằng chúng ta có một trang web, với các tab và nếu bạn nhấp vào một trong các tab, nó sẽ hiển thị một số biểu mẫu, một trong các biểu mẫu chứa đầu vào tải lên, bạn chọn một hình ảnh và nhấp vào tải lên, sau đó thì sao? Nhớ lại rằng tôi đang sử dụng anglejs, vichuploaderbundle, symfony và Doctrine làm ORM.

Cảm ơn trước!

5 hữu ích 0 bình luận 1.8k xem chia sẻ
-1

tập tin cành cây

{{ 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)}}

người nâng cấp lớp học

<?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;
    }

}

lớp thực thể

class entity extends Uploder
{

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

và thêm đường dẫn đã phân loại sau đó thêm đường dẫn remov

-1 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ angularjs forms symfony vichuploaderbundle , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading