我决定将一个网站从Laravel 4.3升级到Laravel 5.1,我面临一个奇怪的问题。
我尝试使用DropzoneJS库上传一些图片。我告诉这个库:"在将图片发送到/pictures/store
之前(使用Ajax POST方法),将album_id
参数添加到请求"。
此部分正常运行,但在我的PictureController
中,store
操作正在使Request
对象保持为空,而不是包含所有输入和许多其他内容。
查看:
{!! Form::open(['url' => '/pictures/store', 'class' => 'dropzone', 'id' => 'myAwesomeDropzone']) !!}
{!! Form::hidden('album_id', $album->id) !!} // Gives a correct value here
{!! Form::close() !!}
JS:
var token = $('meta[name="csrf-token"]').attr('content');
Dropzone.options.myAwesomeDropzone = {
paramName : 'file',
maxFilesize : 8, // Mo
acceptedFiles : 'image/*',
headers : {
'X-CSRF-TOKEN' : token
},
sending : function(file, xhr, formData) {
formData.append('album_id', $('form input[name=album_id]').val()); // Still a correct value here
},
success : function(file, response) {
console.log(response); // Will display the Request object (see controller)
},
error : function(file, error) {
console.error(error);
}
}
控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class PictureController extends Controller {
public function store(Request $request) {
return response()->json(['request' => $request]); // Returns the Request object
}
}
这是我的Request对象:
不包含任何内容......以及Ajax请求:
-----------------------------98052356720717
Content-Disposition: form-data; name="album_id"
1
-----------------------------98052356720717
Content-Disposition: form-data; name="_token"
It1DQQiXuiLJGwgJwx5UVXe1QEP7TsC1uovglxD2
答案 0 :(得分:2)
嗯,我找到了一个解决方案,但我很确定这不是最好的解决方案。
在我的PictureController
中,而不是像这样获取album_id
参数:
$request->input('album_id')
我使用了Input
门面(Laravel 4&#39; s风格):
Input::get('album_id')
我不知道为什么,但它确实有效!如果你有更好的解决方案,请确保我会选择你最好的答案。同时,我的是最好的:D