Сохранение картинки
В .env запишем:
APP_URL=http://laratest2.loc
Изменим config/filesystems.php . Запишем в [‘disks’][‘public’][‘root’] :
public_path('uploads')
Это значит, что картинки будут сохранятся в папку public/uploads, а не storage/app/public (storage_path(‘app/public’)), как было раньше.
И поменяем в нем же:
'default' => env('FILESYSTEM_DRIVER', 'public'),
В Models/Post.php запишем:
protected $fillable = ['title', 'description', 'content', 'category_id', 'thumbnail'];
Изменим метод store для сохранения данных:
public function store(Request $request)
{
$request->validate([
'title' => 'required',
'description' => 'required',
'content' => 'required',
'category_id' => 'integer', // значит, что параметр обязательный и он должен быть integer
'thumbnail' => 'nullable|image', // значит, что параметр не обязательный, но это должна быть картинка
]);
$data = $request->all();
// сохраняем изображение
if ($request->hasFile('thumbnail')) {
$folder = date('Y-m-d');
$data['thumbnail'] = $request->file('thumbnail')->store("images/{$folder}");
}
$post = Post::create($data);
/*
* используем https://laravel.com/docs/8.x/eloquent-relationships#syncing-associations
* для вставки уникальных связи в post_tag таблицу
*/
$post->tags()->sync($data['tags']);
return redirect()->route('posts.index')->with('success', 'Статья добавлена!');
}