2014-09-26 78 views
2

在Laravel我有一个资源控制器,我需要处理图片上传。在我create.blade.php我有以下形式:Laravel上传文件到资源

{{ Form::open(array('action' => '[email protected]', 'method' => 'post')); }} 
{{Form::text('text'); }} 
{{Form::file('photo');}} 
{{Form::submit('Submit');}} 
{{ Form::close() }} 

在我PhotoController我有以下的存储功能

public function store() 
{ 
    if (Input::hasFile('photo')) 
    { 
     return 'Got the photo'; 
    } 
    else { return Input::get('text'); } 
} 

从外地“文本”输入返回,但是它确实似乎不像Laravel可以找到我上传的照片。 我试图改变方法来放置和创建一个自定义函数来处理这个,但有相同的结果。我为什么不能让Laravel认识到我已经附加了一个文件?

在此先感谢

回答

2

你需要像这样

{{ Form::open(array('action' => '[email protected]', 'method' => 'post', 'files' => true, 'enctype' =>"multipart/form-data")); }} 

添加'files' => true'enctype' =>"multipart/form-data"到表单至于这取决于你在做什么的POSTPUT选项。在使用store资源方法时,应该使用POST。如果您打算使用update方法,那么您将使用PUT

对于资源控制器的方法和HTTP请求,这样的工作

+-------------------+-------------+ 
| Controller method | HTTP Method | 
+-------------------+-------------+ 
| index    | GET   | 
| create   | GET   | 
| store    | POST  | 
| show    | GET   | 
| edit    | GET   | 
| update   | PUT/PATCH | 
| destroy   | DELETE  | 
+-------------------+-------------+ 

的困惑的有createedit,你可能会认为应该是POST但要记住这是该网页“获取”的形式,以编辑或创建一个项目。

一旦你有你的文件,你将需要做一些事情。因此,下次你会想要做的文件的东西,所以你需要在这些

$photo = Input::file('photo'); 
$photo->move($destinationPath, $fileName); 

文档和所有其他Input::file()方法可以在Laravel documentation here找到。

+0

工程就像一个魅力。尚未测试移动功能 - 但现在注册了我已上传文件,并在附件时返回“获取照片”。 谢谢 – user3501066 2014-09-26 18:12:06

0
{{ Form::open(array('route' => 'images.store', 'role' => 'form', 'files' => true)) }} 

这是我用我的文件上传表单,我没有'enctype''method',我指向一个路径,而不是一个行动。

这是它转换到HTML:

<form method="POST" action="action url" accept-charset="UTF-8" role="form" enctype="multipart/form-data"><input name="_token" type="hidden" value="token value"> 

正如你可以看到'enctype''method'Form::open辅助函数添加。 role="form"用于Bootstrap以正确格式化表单。

关于HTML和表格:http://laravel.com/docs/4.2/html

+0

工程非常好。与DavidT相比,这种解决方案的优势是什么? – user3501066 2014-09-26 18:15:38

+0

真的没有什么优势,只是指出一些参数是可选的,并且使用路线而不是动作。这不是“另一种解决方案”,我们都指出了相同的情况。他的回答非常好:) – 2014-09-26 18:18:21

+0

非常感谢:-) – user3501066 2014-09-27 20:38:29