TokenMismatchException

时间:2015-11-20 16:45:56

标签: php laravel blade

我正在使用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在同一个表格中?

这是什么解决方法?我需要同样形式的两个上传者。我愿意接受最佳方式。

感谢。

1 个答案:

答案 0 :(得分:1)

您是否使用{!! Form::open() !!}打开表单?如果您不是,则需要使用帮助程序csrf_field()来包含CSRF令牌。

例如:

<form method="POST" action="{{ route('episode.create') }}" enctype="multipart/form-data">

{!! csrf_field() !!}

如果您使用的是{!! Form::open() !!},请提供整个表单代码,这有助于调试您的问题。

  

我意识到这是因为我有两个相同形式的文件上传器。

这不会导致您的问题,您可以在表单中包含任意数量的文件字段。