Here is my starting point for a laravel CRUD controller.
I would appreciate it if someone could do a review and show me how an experienced developer would approach this.
I do not want to progress with my app if I am not using the best practices.
I am using Laravel 8
<?php
namespace App\Http\Controllers;
use App\Models\Employee;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Redirect;
use Symfony\Component\HttpFoundation\Session\Session;
class EmployeeController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
// get all the employees
$employees = Employee::all();
// load the view and pass the employees
return view('employees.index')
->with('employees', $employees);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('employees.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$data = $this->validate($request, [
'firstname' => ['required', 'string', 'max:255'],
'lastname' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'max:255'],
'phone' => ['required', 'string', 'max:255'],
'user_id' => ['required', 'int'],
]);
Employee::create($data(
'user_id' => Auth::user()->id;
));
return redirect('/employees' . $request->id)->with('success', 'Employee successfully created');
}
/**
* Display the specified resource.
*
* @param \App\Models\Employee $employee
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$employee = Employee::find($id);
return view('employees.show')
->with('employee', $employee);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Employee $employee
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$employee = Employee::find($id);
return view('employees.edit')
->with('employee', $employee);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Employee $employee
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Employee $employee)
{
// validate
$rules = array(
'title' => '',
'firstname' => 'required',
'lastname' => 'required',
'email' => 'required|email',
'phone' => 'required',
'position' => '',
'dob' => '',
'gender' => '',
'line_1' => '',
'line_2' => '',
'line_3' => '',
'town' => '',
'city' => '',
'county' => '',
'postcode' => '',
'start_date' => '',
'end_date' => '',
'salary' => '',
'employment' => '',
'department_id' => '',
);
$validator = Validator::make(request()->all(), $rules);
if ($validator->fails()) {
return Redirect::to('employees/' . $employee->id . '/edit')
->withErrors($validator)
->withInput();
} else {
$employee->update($validator->validated());
return redirect()->refresh()
->with('success', $employee->firstname . ' has been successfully updated');
}
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Employee $employee
* @return \Illuminate\Http\Response
*/
public function destroy(Employee $employee)
{
//
}
}