2014-01-15 2 views
6

Я пытаюсь удалить старый образ пользователя, если пользователь обновляет его фотографию профиля. Я использую Laravel 4.1 и находчивый UserController.Laravel 4, удалить изображение внутри метода сообщения/возможно?

Обновление картины прекрасно работает. Новый файл сохраняется в моей папке, а файл-файл перезаписывается в базе данных. Однако я хотел бы удалить старое изображение. Поэтому у меня есть следующий код, который работает хорошо, если я использую его на пустой странице с маршрутом получить «тест», например

$oldimage = Auth::user()->profile_picture; 

File::delete('img/profile_pictures/users/' . $oldimage); 

Everytime я пытаюсь осуществить это в процесс обновления изображения, старый не удаляется. Я уже имею в виду, что мне нужно удалить старый, прежде чем перезаписывать имя файла.

Должно ли это что-либо делать с помощью метода POST, который контроллер использует для обновления? Как я могу это исправить?

public function update($id){ 
    $validation = Validator::make(
     Input::all(), [ 
      'name'=>'required', 
      'surname'=>'required', 
      'email'=>'required', 
      'email' => 'email']); 

    if($validation->fails()){ 
     return Redirect::to(
       'dashboard#profile' 
      )->withInput()->withErrors(
       $validation->messages()); 
    } 

    $user = User::find($id); 
    $user->name = Input::get('name'); 
    $user->surname = Input::get('surname'); 
    $user->email = Input::get('email'); 

    if (Input::hasFile('profile_picture_update')) { 
     $oldimage = Auth::user()->profile_picture; 
     File::delete('img/profile_pictures/users/' . $oldimage); 
    } 

    $imageFile = Input::file('profile_picture_update'); 
    $newprofile_picture = Image::make(
     $imageFile->getRealPath() 
    )->resize(400, null, true)->crop(400, 400); 

    $name = time() . '-' . 
     Input::get('name') . 
     '-' . Input::get('surname') . 
     '.' . $imageFile->getClientOriginalExtension(); 

    // $name = time() . '-' . $profile_picture->getClientOriginalName(); 

    // Below the profile_picture variable is overrridden. 
    $newprofile_picture = $newprofile_picture->save(
     public_path().'/img/profile_pictures/users/'.$name 
    ); 
    $user->profile_picture = $name; 
    $user->save(); 

    return Redirect::to(
     'dashboard#profile' 
    )->with(
     'updatemessage', 'Yep! Deine Änderungen wurden gespeichert.' 
    ); 
} 
+0

Это не имеет ничего общего с методом запроса. Можете ли вы опубликовать полный код метода Controllers, который обрабатывает почтовый запрос? – chris342423

+0

сделанный здесь вы идете – patrick

+1

права доступа были бы моим первым предположением. Во-вторых: почему вы действительно должны удалить файл. просто перезапишите его. – Kjell

ответ

0

Я нашел способ сделать это, создав вспомогательную функцию, а затем вызвав вспомогательную функцию в методе контроллера.

http://laravel.com/docs/helpers

1

почему вы не используете модель User вы только извлеченный получить старое изображение?

if (Input::hasFile('profile_picture_update')) { 
    $oldimage = Auth::user()->profile_picture; 
    File::delete('img/profile_pictures/users/' . $oldimage); 
} 

заменить его

if (Input::hasFile('profile_picture_update')) { 
    $oldimage = $user->profile_picture; 
    File::delete('img/profile_pictures/users/' . $oldimage); 
} 
+0

У меня не было проблем с теми, что были в строках. Они просто не работали в функции обновления Поскольку я передал их в вспомогательную функцию и назвал эту функцию, все было хорошо. – patrick

Смежные вопросы