Я создаю функцию редактирования профиля в моем проекте laravel.
Я хочу обновить изображение профиля. Когда я загружаю новое изображение, я вижу новое изображение в profile / index.blade.php.
Но когда я не загружал изображение, я не мог видеть ни одного изображения в profile / index.blade.php. И я получил ошибку, которая говорит
Вызов функции-члена store () в null
Страница редактирования профиля - это профиль /create.blade.php. И когда я нажимаю кнопку Сохранить, я могу перенаправить на страницу профиля, profile / index.blade.php.
Что я хочу сделать, это
, когда я загружаю новыйизображение, я хочу показать новый профиль на index.blade.php. И если я не загружаю изображение, я хочу перенаправить его на index.blade.php и показать предыдущее изображение профиля.
У меня есть папка профиля в моем хранилище. Я уже сделал хранилище php artisan: ссылка.
index.blade.php
<div class="person">
@if(empty(Auth::user()->profile->image))
<img src="{{asset('image/image1.jpg')}}" >
@else
<img src="{{ asset('storage/'.Auth::user()->profile->image) }}" >
@endif
</div>
create.blade.php
<div class="content">
<div class="userinfo">
<div class="profile">
</div>
<div class="image-preview" id="imagePreview">
@if(empty(Auth::user()->profile->image))
<img src="{{asset('image/image1.jpg')}}" id="image-preview__image">
@else
<img src="{{ asset('storage/'.Auth::user()->profile->image) }}" id="preview">
@endif
</div>
<form action="{{ route('profile.store') }}" method="POST" enctype="multipart/form-data" name="image">
@csrf
<div class="preview">
<input type="file" id="file" accept="image/*" name="image">
<label for="file">
Change Image
</label>
</div>
<ul class="information">
<li>Gender :<br>
<div class="gender">
<select name="gender" id="" name="gender" >
<option class="option" value="@if(empty(Auth::user()->profile->gender))Select Gender
@else{{ Auth::user()->profile->gender }}@endif" selected="selected">
@if(empty(Auth::user()->profile->gender))Select Gender
@else{{ Auth::user()->profile->gender }}@endif
</option>
<option value="male" >male</option>
<option value="female" class="selected">female</option>
<option value="any">any</option>
</select>
</div>
</li>
<li>Country :<br>
<div class="country">
<select name="country" id="" name="country">
<option class="option" value="@if(empty(Auth::user()->profile->country))Select country
@else{{ Auth::user()->profile->country }}@endif" selected="selected">
@if(empty(Auth::user()->profile->country))Select country
@else{{ Auth::user()->profile->country }}@endif
</option>
<option value="Afghanistan">Afghanistan</option>
<option value="Albania">Albania</option>
<option value="Algeria">Algeria</option>
<option value="American Samoa">American Samoa</option>
</select>
</div>
</li><br>
<li>Birthday :<br>
<input type="text" class="birthday" id="bod" name="bod"
value="@if(!empty(Auth::user()->profile->bod)){{ Auth::user()->profile->bod }}@endif">
</li>
<li> Instagram :<br>
<input type="text" class="instagram" name="instagram"
value="@if(!empty(Auth::user()->profile->instagram)){{ Auth::user()->profile->instagram }}@endif">
</li><br>
<li>User Description :<br>
<textarea name="description" id="" cols="60" rows="10">@if(!empty(Auth::user()->profile->description)){{ Auth::user()->profile->description }}@endif</textarea></li>
<button type="submit" class="saveBtn">Save</button>
</ul>
</div>
UserController.php
<?php
namespace App\Http\Controllers;
use App\Http\Requests\Profile\CreateProfileRequest;
use Illuminate\Http\Request;
use App\Profile;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
class UserController extends Controller
{
public function __construct()
{
$this->middleware('user');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$posts = Auth::user()->favourites;
return view('profile.index')->with('profile', Profile::all())->with('posts', $posts);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('profile.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request, Profile $profile)
{
$user_id = auth()->user()->id;
$data = $request->only(['image']);
if($request->hasFile('image')){
//upload it
$image = $request->image->store('profile');
//delete old image
Storage::delete($profile->image);
} else {
$image = $profile->image;
}
Profile::updateOrCreate(
['user_id' => $user_id],
[
'image' => $image,
'gender' => request('gender'),
'country' => request('country'),
'bod' => request('bod'),
'instagram' => request('instagram'),
'description' => request('description'),
]);
//flash message
//redirect user
return redirect()->route('profile.index');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Profile $profile)
{
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
}
}