DEV Community

Morcos Gad
Morcos Gad

Posted on

3 1

Typical Mistakes Juniors Make - Laravel

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
// 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);
    });
});

Enter fullscreen mode Exit fullscreen mode
  • Not Using Route Model Binding
// 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']));
}

Enter fullscreen mode Exit fullscreen mode
  • Too Long Eloquent Create/Update Code
// 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');
}

Enter fullscreen mode Exit fullscreen mode
  • Not Naming Things Properly
// 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,
    // ...
  ];
}

Enter fullscreen mode Exit fullscreen mode
  • Breaking MVC Pattern: Logic in Blade
// Whenever I see a @php directive in a Blade file, my heart starts beating faster
@php
$x = 5
@endphp

Enter fullscreen mode Exit fullscreen mode

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

Happy Code :)

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay