在Laravel我有一个资源控制器,我需要处理图片上传。在我的create.blade.php中,我有以下形式:
{{ Form::open(array('action' => 'PhotoController@store', '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'); }
}
返回字段'text'的输入,但是看起来Laravel似乎找不到我上传的照片。 我试图改变方法来放置和创建一个自定义函数来处理这个,但结果相同。为什么我不能让Laravel认出我附加了一个文件?
提前致谢
答案 0 :(得分:2)
您需要将'files' => true
和'enctype' =>"multipart/form-data"
添加到表单中,如此
{{ Form::open(array('action' => 'PhotoController@store', 'method' => 'post', 'files' => true, 'enctype' =>"multipart/form-data")); }}
关于POST
和PUT
选项,这取决于您正在做什么。在使用store
资源方法时,您应该使用POST
。如果您要使用update
方法,则可以使用PUT
。
对于资源控制器,方法和HTTP请求的工作方式如下
+-------------------+-------------+
| Controller method | HTTP Method |
+-------------------+-------------+
| index | GET |
| create | GET |
| store | POST |
| show | GET |
| edit | GET |
| update | PUT / PATCH |
| destroy | DELETE |
+-------------------+-------------+
令人困惑的是create
和edit
您可能认为应该是POST
,但请记住这是“得到”的网页。表单以编辑或创建项目。
收到文件后,您需要对其进行操作。因此,接下来您将要对文件执行某些操作,因此您需要
$photo = Input::file('photo');
$photo->move($destinationPath, $fileName);
可以在Laravel documentation here中找到有关这些和所有其他Input::file()
方法的文档。
答案 1 :(得分: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"
{{1}}用于正确格式化表单。
关于HTML和表单:Bootstrap