Php 错误:";找不到该文件";使用Symfony2上传文件
我正在尝试在我的应用程序中上载图像以将其存储在数据库中,下面是以下代码: 控制器:Php 错误:";找不到该文件";使用Symfony2上传文件,php,ajax,symfony,doctrine-orm,Php,Ajax,Symfony,Doctrine Orm,我正在尝试在我的应用程序中上载图像以将其存储在数据库中,下面是以下代码: 控制器: public function createAction(Request $request) { $entity = new Student(); $form = $this->createCreateForm($entity); $form->handleRequest($request); if ($form->isValid()) {
public function createAction(Request $request)
{
$entity = new Student();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$file = $entity->getPhoto();
$fileName = md5(uniqid()).'.'.$file->guessExtension();
$photoDir = $this->container->getParameter('kernel.root_dir').'/../web/uploads/images';
$file->move($photoDir, $fileName);
$entity->setPhoto($fileName);
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('student_show', array('id' => $entity->getId())));
}
return $this->render('BackendBundle:Student:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
实体:
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
//...
/**
* @var string
*
* @ORM\Column(name="photo", type="string", length=255, nullable=true)
* @Assert\File(mimeTypes={ "image/png","image/jpg" })
*/
private $photo;
public function setPhoto($photo)
{
$this->photo = $photo;
return $this;
}
public function getPhoto()
{
return $this->photo;
}
表单类型:
//...
->add('photo', 'file', array('required' => false))
//...
有了这段代码,我得到了错误消息:“文件找不到”,我不知道如何修复它来保存上传的文件
更新:我认为错误在于我之前发出的ajax请求,它没有正确地发送文件字段。如何通过ajax正确发送这种类型的字段?我已经在这个字段中显示了发送Ajax请求的值,该值为“开”,所以我认为这就是问题所在
解决方案:我已经解决了代码中的更改问题:
而不是data:newformdata($(this)[0])
data:$(this).serialize()
- 添加ajax请求:
processData:false,
contentType:false,
cache:false,
$form = $this->createForm(new ProductType(), $product);
$form->handleRequest($request);
您的请求数据未与实体绑定,这就是出现错误的原因。请再次检查您收到的链接Hi@AshokChitroda,您说我添加了代码,这里只放了一些与上传文件相关的代码。如果您问题中的代码没有反映这一点,那么很难为您提供帮助。请按原样更新你的问题。嗨@xabbuh,我已经更新了代码。顺便说一下,当我按照官方文档更改代码时,然后运行
app/console-doctor:schema:update--force
。这样数据库中的表就会被更新,应该可以正常工作了吧?或者是有什么别的事情要做来更新我上面的代码?你从哪里得到这个错误的?这是验证错误还是PHP错误?这是您收到的确切错误消息吗?嗨@xabbuh,这是一个表单验证错误。我目前正在做一个ajax调用提交并返回错误消息。看看我发布的另一个帖子,我采用了另一种方式,似乎没问题,但我又遇到了另一个错误。你确定该文件是通过AJAX调用发送的吗?当您不通过AJAX请求提交表单时,它是否有效?顺便说一句,如果你不断地修改代码并用修改过的代码发布新问题,而旧问题仍然没有得到回答,你将很难得到正确的答案。嗨@xabbuh,很抱歉,我在进行过程中提出了不同的问题,因为针对同一问题的其他代码和我收到的其他错误消息都认为相同,并帮助查看解决方案。现在我正在尝试其他代码,消息仍然没有发出Ajax请求,symfony显示alvalidar表单。您好@xabbuh,奇迹般地,我在没有Ajax请求的情况下测试了表单symfony,正如您告诉我的,并向我显示了以下内容:无法在“/opt/lampp/htdocs/symfony/app/./web/uploads/images”中写入目录
据我所知,该错误是由于目标目录中的许可证问题造成的。非常感谢你的奉献精神。