Próbuję zapisać oraz wyświetlić obrazek, który przesłał użytkownik jednak nie działa wyświetlanie dodanego obrazka, ponieważ wpis w bazie danych prowadzi do złej ścieżki.
Pracuję lokalnie na XAMPP jeśli ma to jakiekolwiek znaczenie.
Migracja
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->string('avatar')->default('default.png');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
Obrazek
<img src="/storage/avatars/{{ $user->avatar }}" alt="{{ $user->name }}">
Formularz
<form method="POST" action="/users/{{ $user->id }}" enctype="multipart/form-data">
@method('PATCH')
@csrf
<label for="avatar">avatar</label>
<input type="file" name="avatar">
<button type="submit">send</button>
</form>
Metoda zapisująca avatar
public function update(Request $request, User $user)
{
$formData = request()->validate([
'avatar' => ['image', 'mimes:jpeg,jpg,png', 'max:1024']
]);
if (request()->avatar === NULL) {
$image = 'default.png';
} else {
$image = $user->id . '_avatar_' . time() . '.' . request()->avatar->getClientOriginalExtension();
$request->avatar->storeAs('avatars', $image);
}
$user->avatar = $image;
$user->update($formData);
return redirect('/');
}
W folderze config/filesystems.php
'default' => env('FILESYSTEM_DRIVER', 'public'),
Wpisałem komendę php artisan storage:link