I have an issue with store info into the MySQL database, and I try to change the method that stores info into DB, but it still the same problem. Moreover, I need your help to figure out the problem and solve it.
PostController
<?php public function store(){ $inputs= request()->validate([ 'title'=>'required|min:8|max:100', 'post_image'=>'file', 'body'=>'required' ]); if (request('post_image')){ $inputs['post_image']=request('post_image')->store('images'); } auth()->user()->posts()->create($inputs); return back(); }
Post Model
<?php class Post extends Model { // protected $guarded =[]; public function user(){ return $this->belongsTo(User::class); } public function getPostImageAttribute($value){ return asset($value); } }
Form
<form action="{{route('post.store')}}" method="post" enctype="multipart/form-data"> @csrf <div class="form-group"> <lable for="title">Title</lable> <input type="text" name="title" class="form-control" placeholder="Enter title"> </div> <div class="form-group"> <lable for="file">File</lable> <input type="file" name="post_image" class="form-control-file" id="post_image" placeholder="Upload your image"> </div> <div class="form-group"> <lable for="exampleInputEmail"></lable> <textarea name="body" cols="30" rows="10" class="form-control"></textarea> </div> <button type="submit" class="btn btn-primary"> Submit</button> </form>
I appreciate your effort to help me, and thanks in advance.
Advertisement
Answer
To get the file of the request object you can access it via file() method. And why are you not using method injection for the request
//use IlluminateHttpRequest; - import the use statement at top public function store(Request $request){ $inputs= $request->validate([ 'title'=>'required|min:8|max:100', //'post_image'=>'file', 'body'=>'required' ]); if ($request->hasFile('post_image') && $request->file('post_image')->isValid()){ $inputs['post_image'] = $request->file('post_image')->store('images'); } auth()->user()->posts()->create($inputs); return back(); }