Typical Mistakes Juniors Make - Laravel
Tags: laravel, php, programming, beginners
Published: 2023-04-03 07:41:38

Indeed, I do not think that no one knows about the **laraveldaily** platform and the useful articles that we get from there. I wrote an article on this platform that talks about Typical Mistakes Juniors Make, and I wanted to share with you the main points in it

- Not Using Route Groups

```php
// you have routes like this
Route::get('dashboard', [HomeController::class, 'index'])->name('dashboard')->middleware(['auth']);
Route::resource('donation', DonationController::class)->middleware(['auth']);
Route::resource('requisition', RequisitionController::class)->middleware(['auth']);
 
Route::name('admin.')->prefix('admin.')->group(function () {
    Route::view('/', 'admin.welcome')->middleware(['auth', 'admincheck']);
    Route::resource('donor', DonorController::class)->middleware(['auth', 'admincheck']);
    Route::resource('details', OrganisationDetailController::class)->middleware(['auth', 'admincheck']);
});

// Now
Route::middleware('auth')->group(function () {
    Route::get('dashboard', [HomeController::class, 'index'])->name('dashboard');
    Route::resource('donation', DonationController::class);
    Route::resource('requisition', RequisitionController::class);
 
    Route::name('admin.')->prefix('admin.')->middleware('admincheck')->group(function () {
        Route::view('/', 'admin.welcome');
        Route::resource('donor', DonorController::class);
        Route::resource('details', OrganisationDetailController::class);
    });
});

```

- Not Using Route Model Binding

```php
// in your routes you have
Route::resource('student', StudentController::class);

// But I see some beginners still write Controller code like this
public function show($id)
{
    $student = Student::findOrFail($id);
 
    return view('dashboard/student/show', compact(['student']));
}

// Now, use Route Model Binding and Laravel will find Model
public function show(Student $student)
{
    return view('dashboard/student/show', compact(['student']));
}

```

- Too Long Eloquent Create/Update Code

```php
// When saving data into DB I have seen people write code similar to this
public function update(Request $request)
{
    $request->validate(['name' => 'required']);
    $user = Auth::user();
    $user->name = $request->name;
    $user->username = $request->username;
    $user->mobile = $request->mobile;
    // Some other fields...
    $user->save();
    return redirect()->route('profile.index');
}

// First, in this example, you don't need to set the Auth::user() to the $user variable. The first option could be
public function update(Request $request)
{
    $request->validate(['name' => 'required']);
    auth()->user()->update([$request->only([
        'name',
        'username',
        'mobile',
        // Some other fields...
    ]);
    return redirect()->route('profile.index');
}

// The second option put validation into Form Request. Then into the update() method you would need just to pass $request->validated()
public function update(ProfileRequest $request)
{
    auth()->user()->update([$request->validated());
    return redirect()->route('profile.index');
}

```

- Not Naming Things Properly

```php
// For example, shortening variable names: instead of $data they call $d. Always use proper naming. For example
Route::get('/', [IndexController::class, 'show'])
  ->middleware(['dq'])
  ->name('index');
Route::get('/about', [IndexController::class, 'about'])
  ->middleware(['dq'])
  ->name('about');
Route::get('/dq', [IndexController::class, 'dq'])
  ->middleware(['auth'])
  ->name('dq');

// if we would go into app/Http/Kernel.php to find this middleware, we could find something like this
class Kernel extends HttpKernel
{
  // ...
  protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'admin' => \App\Http\Middleware\EnsureAdmin::class,
    'dq' => \App\Http\Middleware\Disqualified::class, 
    'inprogress' => \App\Http\Middleware\InProgress::class,
    // ...
  ];
}

```

- Breaking MVC Pattern: Logic in Blade

```php
// Whenever I see a @php directive in a Blade file, my heart starts beating faster
@php
$x = 5
@endphp

```
MVC architecture was created for a reason: that separation of concerns between Model, View and Controller makes it much more predictable where to search for certain code pieces.

- Too Big Controllers
- N+1 Eloquent Query Problem
- Relationships: Not Creating Foreign Keys
- Not Reading The Documentation


I spoke briefly about the article, but you should go deeper and visit the article itself
- https://laraveldaily.com/post/laravel-typical-mistakes-juniors-make

Happy Code :)