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
JavaScript
x
<?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
JavaScript
<?php
class Post extends Model
{
//
protected $guarded =[];
public function user(){
return $this->belongsTo(User::class);
}
public function getPostImageAttribute($value){
return asset($value);
}
}
Form
JavaScript
<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
JavaScript
//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();
}