kylevorster's avatar

Proper code writing with formatted error control

Hey,

I know this is a very vague question but I hope someone might have the time to just look at this code and tell me what they think, could I do error controlling better or does it seem fine.

<?php

Route::post('/add', [
    'as' => 'SliderAdd',
    'uses' => 'Admin\SliderController@store'
]);

class StoreImageFileRequest extends Request
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'image' => 'required|mimes:png,jpg,jpeg'
        ];
    }

    public function messages()
    {
        return [
            'image.required'    => 'You have not selected a file to upload.',
            'image.image'       => 'Invalid file format used, Please use one of the following PNG, JPG, JPEG.',
        ];
    }
}

class Slider extends Model
{
    protected $table = 'slider';
    
    protected $fillable = ['image','active','user_id','position'];
    
    public function scopeGetActive($query)
    {
        return $query->where('active', 1)->orderBy('position', 'asc');
    }
    
}

class SliderController extends Controller
{

    public function store(StoreImageFileRequest $request)
    {
                
        if ( ! $request->file('image')->isValid()) 
        {            
            return response()->makeAjax($request, 'SliderHome', [
                'status'    => 'false', 
                'message'   => trans('errors.unknownupload') // unable to upload file, unknown error occurred. 
            ]);
        }

        try {

            $image_name = str_random(10) . '.' . $request->file('image')->getClientOriginalExtension();
    
            $request->file('image')->move(env('PUBLIC_FOLDER') . config('filepaths.slider_path') . '/', $image_name);

            $user = Auth::user();
            
            $slider_last = Slider::create([
                'image'     => $image_name,
                'active'    => '1',
                'position'  => 0,
                'user_id'   => $user->id,
            ]);
            
        } catch (Exception $e) {

            return response()->makeAjax($request, 'SliderHome', [
                'status' => 'false', 
                'message' => (env('APP_DEBUG') ? '#' . $e->getLine() . ' - ' . $e->getMessage() : trans('errors.unknownupload')) // unable to upload file, unknown error occurred. 
            ]);
        }
                
        try {
            $slider_count = Slider::count();
            
            $var = $slider_count - 1;
        
            $new_position = 1;
            
            $sliders = Slider::All();
            
            while($var >= 1)
            {
                Slider::where('position', $var)->update(['position' => $var + 1]);  
                $var--;
            }
            
            $slider_last->position = $new_position;
            $slider_last->save();
 
        } catch (Exception $e) {

            return response()->makeAjax($request, 'SliderHome', [
                'status'    => 'false', 
                'message'   => (env('APP_DEBUG') ? '#' . $e->getLine() . ' - ' . $e->getMessage() : trans('errors.unknownupload')) // unknown error occurred
            ]);
        }

        $html = view('admin.slider.ajax.slider', [
            'slider' => $slider_last
        ])->render();

        return response()->makeAjax($request, 'SliderHome', [
            'status'    => 'true', 
            'html'      => $html,
            'message'   => trans('errors.slideradded'), // slider added
        ]);
    }
0 likes
1 reply
kylevorster's avatar

Forgot to post this class.

class ResponseMacroServiceProvider extends ServiceProvider
{

    public function boot(ResponseFactory $factory)
    {
        $factory->macro('makeAjax', function ($request, $route, $data, $route_params = []) use ($factory) 
        {
            if($request->ajax())
            {
                return response()->json($data);
            }
            
            return redirect()->route($route, $route_params)->with('alert', [
                'status' => ($data['status'] == 'false' ? 'danger' : 'success'), 
                'message' => $data['message']
            ]);
        });    
    }
}

Please or to participate in this conversation.