如何更新Laravel 4中的文件上传


How can I update a file upload in Laravel 4?

我已经构建了一些我希望能够工作的东西。它应该上传文件,并用新文件的路径替换记录的"附件"条目。方法如下:

public function update($id)
{
    $article = Article::find($id);
    $article->username = Session::get('username');
    $article->body = Input::get('body');
    $article->title = Input::get('title');
    if(Input::hasFile('attachment'))
    {
        $file = Input::file('attachment');
        $name = time() . '-' . $file->getClientOriginalName();
        $file = $file->move(public_path() . '/documents/articles/', $name);
        $article->attachment = $name;;
    }
    $article->save();//Commit this edit to the database
    return Redirect::route('articles.index');
}

形式:

<div class="form-general">
    {{ Form::model($article, array('route' => array('articles.update', $article->id, 'files' => true), 'method' => 'PUT')) }}
    <div>
        {{ Form::label('title', 'Title:') }}
        {{ Form::text('title', null, array('class' => 'form-control' )) }}
    </div>
    <br />
    <div>
        @if(! empty($article->attachment))
        {{ Form::label('attachment', 'Attachment:') }} <br />
        <div class="attachment-replace" style="display:none;">
        {{ Form::file('attachment', null, array('class' => 'form-control' )) }}
        </div>
        <a class="current-attachment" href="/documents/articles/{{ $article->attachment }}">{{ $article->attachment }}</a>&nbsp;<a href="#" class="current-attachment"><span class="glyphicon glyphicon-remove-circle remove-attachment"></span></a>
        @else
        {{ Form::label('attachment', 'Attachment:') }}
        {{ Form::file('attachment', null, array('class' => 'form-control' )) }}
        @endif
    </div>
    <br />
    <div>
        {{ Form::label('body', 'Body:') }}
        {{ Form::textarea('body', null, array('class' => 'form-control' )) }}
    </div>
    <br />
    <div>{{ Form::submit('Edit Post', array('class' => 'btn btn-default')) }}</div>
    {{ Form::close() }}
</div>

目前,什么都没发生。该方法会被执行,其他字段也会很好地更新,但附件不会。文件输入"附件"似乎从未设置过。如何正确更新文件路径并立即上传其替换文档?

您的files参数是错误数组的一部分。你有这行,它打开你的表格:

{{ Form::model($article, array('route' => array('articles.update', $article->id, 'files' => true), 'method' => 'PUT')) }}

如果你仔细观察,你会发现files => true选项是route数组的一部分,但它应该在它之外

{{ Form::model($article, array('route' => array('articles.update', $article->id), 'files' => true, 'method' => 'PUT')) }}

正如他们所说,魔鬼在于细节;)