Routes

Route Existence

Route::has('users.edit')

Resource Routes

Route::resource('photos', PhotoController::class);
Route::resource('photos', PhotoController::class)->only(['index', 'show']);
Route::resource('photos', PhotoController::class)->except(['create', 'store', 'update', 'destroy']);

Named Resource Routes

Route::resource('photos', PhotoController::class)->names([
    'create' => 'photos.build'
]);

Redirect Route

Route::redirect('/', 'dashboard');

Optional Parameters

user/{name?}

Exclude Resource Routes

Route::resource('/', 'MyController', ['except' => ['destroy', 'update']]);

Prefix and Namespace

Route::prefix('myNameGroup')->name('myNameGroup.')->group(function () {
    Route::get('/', 'SuppliersController@ordersBySupplier')->name('create');
});
// protected supplier only routes
Route::middleware(['auth', 'auth.supplier'])group(function () {

    Route::get('/orders', 'SuppliersController@ordersBySupplier')->name('orders');
    Route::get('/sales-history', 'OrdersController@salesHistory')->name('sales-history');
});

How to fall back to route id when slug is not available.

$page = Page::when(
    is_numeric($page),
    fn ($query) => $query->where('id', $page),
    fn ($query) => $query->where('slug', $page)
)->firstOrFail();
/**
* Retrieve the model for a bound value.
*
* @param  mixed  $value
* @param  string|null  $field
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function resolveRouteBinding($value, $field = null)
{
    return is_numeric($value)
        ? $this->where('id', $value)->firstOrFail()
        : $this->where('slug', $value)->firstOrFail();
}