我正在使用Laravel 5.1
视图上的表单如下所示:
{!! Form::open(['url' => '/admin/episode', 'method' => 'post', 'files' => 'true']) !!}
{!! Form::label('Episode Name') !!}
{!! Form::text('name', null) !!}
{!! Form::label('Description') !!}
{!! Form::text('description', null) !!}
{!! Form::label('Channel') !!}
{!! Form::select('channel', $channels) !!}
{!! Form::label('image') !!}
{!! Form::file('image', ['accept' => 'image/*', 'id' => 'image']) !!}
{!! Form::label('audio', 'Upload Audio file') !!}
{!! Form::file('audio', ['accept' => 'audio/*', 'id' => 'audio']) !!}
{!! Form::submit('SUBMIT') !!}
{!! Form::close() !!}
在我的控制器中,我有两种方法来处理每个媒体文件的上传,一个用于图像,另一个用于音频文件:
public function getImageFileUrl()
{
$filename = Input::file('image');
Cloudder::upload($filename, null);
$imgUrl = Cloudder::getResult()['url'];
return $imgUrl;
}
和
public function getAudioFileUrl()
{
$filename = Input::file('audio');
Cloudder::upload($filename, null);
$audioUrl = Cloudder::getResult()['url'];
return $audioUrl;
}
然后我的控制器中的create方法:
public function create(Request $request)
{
$image = $this->getImageFileUrl();
$audio = $this->getAudioFileUrl();
Episode::create([
'episode_name' => $request->name,
'episode_description' => $request->description,
'image' => $image,
'audio_mp3' => $audio,
'view_count' => 0,
'channel_id' => $request->channel
]);
}
问题是,当我尝试从视图中创建新剧集时,我得到TokenMismatchException in VerifyCsrfToken.php line 53:
我认为是因为我有两个file uploaders
在同一个表格中?
这是什么解决方法?我需要同样形式的两个上传者。我愿意接受最佳方式。
感谢。
答案 0 :(得分:1)
您是否使用{!! Form::open() !!}
打开表单?如果您不是,则需要使用帮助程序csrf_field()
来包含CSRF令牌。
例如:
<form method="POST" action="{{ route('episode.create') }}" enctype="multipart/form-data">
{!! csrf_field() !!}
如果您使用的是{!! Form::open() !!}
,请提供整个表单代码,这有助于调试您的问题。
我意识到这是因为我有两个相同形式的文件上传器。
这不会导致您的问题,您可以在表单中包含任意数量的文件字段。