In Js
$(document).ready(function(){
console.log('doc ready');
$('#category_add_btn').on('click', function(){
add_category();
});
});
function validate() {
var Valid = true;
var allowedTypes = ['image/jpeg', 'image/png', 'image/jpg'];
var maxSize = 2 * 1024 * 1024; // 2MB
// Validate name
if ($('#name').val().trim() === "") {
Valid = false;
alert('Name is required');
}
// Validate image
var imageInput = $('#image')[0];
if (imageInput.files.length === 0) {
Valid = false;
alert('Image is required');
} else {
var imageFile = imageInput.files[0];
// Validate image type (MIME)
if (!allowedTypes.includes(imageFile.type)) {
Valid = false;
alert('Invalid image type. Only JPEG, PNG, and JPG are allowed.');
}
// Validate image size
if (imageFile.size > maxSize) {
Valid = false;
alert('Image size should not exceed 2MB.');
}
}
return Valid;
}
function add_category(){
var input_array = ['name','image'];
removeErrorMessage(input_array);
if (validate()) {
var formData = $('#category_form').serialize();
$.ajax({
data: formData,
type: 'POST',
dataType: 'JSON',
processData : 'false',
contetTpye : 'false',
url: base_url + '/add_category',
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
success: function(response){
if(response.status){
window.location.href = response.redirect_url;
}else{
alert(response.message);
}
},
error: function(error, xhr, status){
console.log('xhr', xhr);
console.log('error', error);
console.log('status', status);
var response_error = error.responseJSON.errors;
console.log(response_error);
displayError(response_error);
}
});
console.log('form', formData);
} else {
console.log('not validated');
}
}
function displayError(response_error){
$.each(response_error, function(input_id, error_message){
$('#error-' + input_id).html(error_message);
});
}
function removeErrorMessage(input_array){
$.each(input_array, function(key, input_id){
$('#error-' + input_id).html('');
});
}
In controller
public function add_category(){
$return_array = ['status'=> false, 'message'=>''];
$rules = [
'name' => 'required|name|string',
'image' => 'required|image|mimes:jpeg,png,jpg|max:2048'
];
$validators = Validator::make($request->all(),$rules);
if ($validators->fails()) {
return response()->json(['status'=>false,'errors'=>$validators->errors()],422);
}else{
$create_category = new Categories();
$name = $request->input('name');
$create_category->name = $name;
if ($request->file('image')) {
$image = $request->file('image');
$extension = $image->getClientOriginalExtension();
$imagename = time().'.'.$extension;
$image->move(public_path('uploads'),$imagename);
$create_category->image = $imagename;
}else{
$return_array['message'] = 'Please Upload Valid Image';
}
$created = $create_category->save();
if ($created) {
$return_array['status'] = true;
$return_array['message'] = 'Category Added Successfully ';
$return_array['redirect_url'] = url('dashboard');
}else{
$return_array['message'] = 'Failed Try Again';
}
}
return response()->json($return_array);
}
fileinput: laravel.com/docs/5.7/requests#files