Php 用我自己的表格上传symfony2格式的文件

Php 用我自己的表格上传symfony2格式的文件,php,symfony,file-upload,symfony-forms,Php,Symfony,File Upload,Symfony Forms,我正在尝试使用我自己的带有symfony2的表单上传一个文件。 我没有得到任何错误,文件名正确地添加到数据库中,但文件没有上传 这是我的路由。yml: upload_homepage: pattern: /upload defaults: { _controller: UploadBundle:Default:index } upload: pattern: /upload/file defaults: { _controller: UploadBundle:

我正在尝试使用我自己的带有symfony2的表单上传一个文件。 我没有得到任何错误,文件名正确地添加到数据库中,但文件没有上传

这是我的路由。yml

upload_homepage:
    pattern:  /upload
    defaults: { _controller: UploadBundle:Default:index }
upload:
    pattern:  /upload/file
    defaults: { _controller: UploadBundle:Default:upload }
小枝:

<form enctype="multipart/form-data" action="{{ path('upload') }}" method="POST">
    <input type="file" name="file">
    <input type="submit">
</form>
<?php

namespace Upload\UploadBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;

use Upload\UploadBundle\Entity\Document;

class DefaultController extends Controller
{
    public function indexAction()
    {
        return $this->render('UploadBundle:Default:index.html.twig');
    }

    public function uploadAction(Request $request)
    {


        $em = $this->getDoctrine()->getManager();
        $document = new Document();
        $document->setChemain($request->files->get('file')->getClientOriginalName());
        //$document->upload();
        // print_r($request->files->get('file')->getClientOriginalName());
        // die();
        $em->persist($document);
        $em->flush();
        return new Response("Ok");
    }
}

我的控制器:

<form enctype="multipart/form-data" action="{{ path('upload') }}" method="POST">
    <input type="file" name="file">
    <input type="submit">
</form>
<?php

namespace Upload\UploadBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;

use Upload\UploadBundle\Entity\Document;

class DefaultController extends Controller
{
    public function indexAction()
    {
        return $this->render('UploadBundle:Default:index.html.twig');
    }

    public function uploadAction(Request $request)
    {


        $em = $this->getDoctrine()->getManager();
        $document = new Document();
        $document->setChemain($request->files->get('file')->getClientOriginalName());
        //$document->upload();
        // print_r($request->files->get('file')->getClientOriginalName());
        // die();
        $em->persist($document);
        $em->flush();
        return new Response("Ok");
    }
}

您必须取消上传行的注释

namespace Upload\UploadBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;

use Upload\UploadBundle\Entity\Document;

class DefaultController extends Controller
{
    public function indexAction()
    {
        return $this->render('UploadBundle:Default:index.html.twig');
    }

    public function uploadAction(Request $request)
    {


        $em = $this->getDoctrine()->getManager();
        $document = new Document();
        $document->upload();

        $em->persist($document);
        $em->flush();
        return new Response("Ok");
    }
}
并在您的文档实体中添加上载方法

/**
 * @param $varfile
 *
 * @return $this
 */
public function setFile($file = null)
{
    $this->file = $file;

    return $this;
}

/**
 * @return string $file
 */
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
    $this->getFile()->move(
         $this->getUploadRootDir(),
         $this->getFile()->getClientOriginalName()
    );

    // set the path property to the filename where you've saved the file
    $this->file = $this->getFile()->getClientOriginalName();
            $this->chemain = $this->getFile()->getClientOriginalName();
}

/**
 * @return null|string
 */
public function getAbsolutePath()
{
    if($this->file)
    {

        return $this->getUploadRootDir().'/'.$this->file;
    }

    return null;
}

/**
 * @return null|string
 */
public function getWebPath()
{
    if($this->file)
    {
        return '/web/'.$this->getUploadDir().'/'.$this->file;
    }

    return null;
}

我找到了一个解决方案,这是可行的,但我不知道这是否是正确的方法。 解决方案:我只修改uploadAction函数

public function uploadAction(Request $request)
    {
        $document = new Document();
        $form = $this->createFormBuilder($document)
        ->add('file')
        ->getForm();

        if ($this->getRequest()->isMethod('POST')) {
        $form->bind($this->getRequest());
            $em = $this->getDoctrine()->getManager();

            $em->persist($document);
            $em->flush();

            return new Response("Ok");

    }

        return new Response("No");


    }

看,这是一个很好的解决方案。至于你的问题,你的脚本上传文件在哪里???你只会得到文件名并将其写入数据库,但不会上传。我知道,我一步一步地遵循文档,这就是我没有得到文件名的原因error@Dmitriy.Net我正在使用Lifecycle回调是的,但您必须在您的实体上载文件。查看我的回答我没有这个函数:
getfile()
getfile是对非对象上的成员函数move()的getchemain()调用:`$this->getchemain()->move(`stop)))将getchemain更改为getfile并添加函数getfile()