繁体   English   中英

如何在Laravel 4中删除和更新照片?

[英]How do I delete and update a photo in Laravel 4?

在我的应用程序中,用户可以上传个人资料照片的图像。 如何更新用户照片并删除以前上传的照片? 这是我到目前为止在上传控制器中拥有的:

照片模型

class Photos extends Eloquent {


    protected  $table = 'photos';

    protected $fillable = array('user_id', 'location');

    public  function user (){

        return $this->belongsTo('User');
    }





}

用户模型

public function photos()
{
    return $this->hasOne('photos');
}

上传控制器

class UploadController extends \BaseController {

public function postUpload (){

    $id = Auth::user()->id;

    $input = Input::all();

    $rules = array(
        'photo' => 'required|image|max:500'
    );


    $validator = Validator::make($input, $rules);

    if($validator->fails()){
        return Redirect::to('user/profile/'.$id.'/edit')->withErrors($validator);
    }

    $extension = Input::file('photo')->getClientOriginalExtension();
    $directory =  public_path('/var/chroot/home/content/59/11581559/html/beta') . '/uploads/'.sha1($id);

    $filename = sha1($id.time()).".{$extension}";
    $upload_success = Input::file('photo')->move($directory, $filename);

    Image::make(Input::file('photo')->getRealPath())->resize(300, 200)->save('foo.jpg');

    if($upload_success){

        $photo = new Photos(array(
            'location' => URL::to('/uploads/'.sha1($id).'/'.$filename)
        ));

        $photo->user_id = $id;
        $photo->save();

        Session::flash('success_photo', 'You have Successfully uploaded your profile photo!');
        return Redirect::to('user/profile/'.$id.'/edit');
    }
    else{
        Session::flash('status_error', 'An Error has occurred while uploading your photo. Please try again!');
    }

    return Redirect::to('user/profile/'.$id.'/edit');

    }
}

视图

    <div class="col-lg-3">
        <div class="panel panel-default">
            <div class="panel-heading">



                @if(Session::has('status_error'))
                <div class="alert alert-error">
                    <a class="close" data-dismiss="alert" href="#" aria-hidden="true">&times;</a>
                    {{ implode('', $errors->all('<li class="error"><b>:status_error</b></li>')) }}
                </div>
                @endif

                    <span class="glyphicon glyphicon-exclamation-sign"></span> Upload a Photo

            </div>

            <div class="panel-body text-center">

                @if($user->photos)
                    <img width="190" height="119" class="img-responsive img-thumbnail" src="{{$user->photos->location }}" alt="">
                @endif
                <div class="clearfix"></div>
                <div class="btn-group mtop-20">
                    <button type="button" class="btn btn-primary" onclick="$('#upload_modal').modal({backdrop:'static'});">
                        <span class="glyphicon glyphicon-upload"></span>
                    </button>
                </div>

            </div>


            <?php echo View::make('modals.photo-upload') ?>
    </div><!-- end panel-default -->
</div><!-- col 3-->

让我们谈谈您在做什么以及从那里开始工作。

上传照片 -在您的控制器中,您正在上传照片。 -如果上传成功,则将在服务器上存储照片的位置以及照片所属的用户的ID。

更新照片 -在您的控制器中,您正在上传照片。 -如果上传成功,您将执行以下操作:

  • 获取当前文件在数据库中的位置。

    $this->photo->where('user_id' , '=' , $the_user_id_in_question) ->get(array('location'));

  • 使用FileSystem类中的delete()函数delete()该位置处的文件(位于此处: https : //github.com/laravel/framework/blob/master/src/Illuminate/Filesystem/Filesystem.php

  • 用新的位置更新用户的照片位置:

    $this->photo->where('user_id' , '=' , $the_user_id_in_question) ->update('location' => $the_new_upload_location);

我希望这就是您想要的。 干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM