im trying to upload image in laravel but have this error: Call to a member function getClientOriginalExtension() on string
this the controller code where i add post to database with the image name:
public function create()
{
return view('frontoffice.posts.create');
}
// Store a newly created post in the database
public function store(Request $request)
{
$request->validate([
'title' => 'required|string|max:255',
'content' => 'required',
'category' => 'required|string',
]);
$file_extensions = $request-> photo -> getClientOriginalExtensions();
$file_name= time(). '.' .$file_extensions;
$path = 'images/posts';
$request -> photo -> move($path,$file_name);
$post = new Post;
$post->title = $request->title;
$post->user_id = "1";
$post->content = $request->content;
$post->category = $request->category;
$post->likes = 0;
$post-> photo = $file_name;
$post->save();
return redirect()->route('posts.index')->with('success', 'Job created successfully');
}
the blade code where i added the enctype="multipart/form-data" to the form :
<form action="{{ route('posts.store') }}" method="POST" enctype="multipart/form-data">
<div class="col-lg-12">
<div class="form-group">
<input class="form-control" name="photo" type="file" id="photo">
</div>
</div>
<div class="col-lg-12">
<ul class="d-flex justify-content-center ">
<li><button class="active" type="submit" value="post">Post</button></li>
<li><a href="{{ route('posts.index') }}" title="" >back</a></li>
</ul>
</div>
</div>
</form>
filesystems:
'posts' => [
'driver' => 'local',
'root' => base_path() . 'public/images/posts/',
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
'throw' => false,
],
Although the error you described isn't related to this one, but you need to add
csrf
protection to your form, since you're usingpost
method, because otherwise, the form won't work (you will have 419 page expired error). So your Blade will be like thisAnd also you have an error in the function name, it's
getClientOriginalExtension()
notgetClientOriginalExtensions()
.