Table of Contents

Laravel is a popular web framework among developers because of its robust toolset and elegant syntax. With the release of Laravel 10, developers have even more tools at their disposal. In this article, we’ll take a look at some of the most exciting new features in Laravel 10 and provide examples of code to help you get started.

Improved Routing

Routing is an essential part of any web application, and Laravel’s routing system makes it easy to define how web requests should be handled. With Laravel 10, the routing system has been improved, making it even more flexible and intuitive.

To define a custom route pattern, you can use the Route::pattern method. For example, if you want to define a route that matches any string of numbers, you can do this:

					Route::pattern('id', '[0-9]+');

You can then define a route that uses this pattern like this:

					Route::get('user/{id}', function ($id) {
    return 'User ' . $id;

With optional route parameters, you can create more dynamic and user-friendly URLs. For example, you can define a route that has an optional locale parameter like this:

					Route::get('{locale?}/about', function ($locale = 'en') {
    return view('about', ['locale' => $locale]);

This will match URLs like /about and /fr/about, with the locale parameter defaulting to en if it is not present.

Enhanced Queueing

Laravel’s queueing system is a powerful tool that enables you to manage and process jobs in the background. With Laravel 10, this system has been enhanced with several new features and improvements.

To define a rate-limited queue, you can use the throttle method. For example, if you want to limit the process job to 10 executions per minute, you can do this:


The allow method specifies the maximum number of jobs that can be processed in the given time frame, while the every method specifies the length of the time frame in seconds.

To create a pipeline of job processing steps, you can use the through method. For example, if you want to create a pipeline that processes jobs using three different classes, you can do this:

					$processed = Queue::pipeline()
    ->through([FirstJob::class, SecondJob::class, ThirdJob::class])

This will create a pipeline that processes jobs in the order they are listed in the through method.

Native Container Resolution for Artisan Commands

Artisan is Laravel’s command-line interface, and it makes it easy to perform a wide range of tasks from the command line. With Laravel 10, Artisan commands can now make use of the application’s native container resolution.

To use container resolution in an Artisan command, you can define a constructor that takes dependencies as arguments. For example, if you want to use the Foo class in an Artisan command, you can do this:

					class MyCommand extends Command
    protected $signature = 'mycommand';
    protected $description = 'My awesome command';

    public function __construct(Foo $foo)
        $this->foo = $foo;

    public function handle()
        // Use the $foo instance here

Laravel will automatically resolve the Foo class from the container and pass it to the constructor of the MyCommand class when the command is executed.

Eloquent Models as Query Builders

Eloquent is Laravel’s Object-Relational Mapping (ORM) system that makes it easy to interact with a database. In Laravel 10, Eloquent models can now be used as query builders, which makes it even easier to write complex database queries.

For example, if you want to retrieve all blog posts that were published in the last 30 days, you can do this:

					use App\Models\Post;

$posts = Post::where('published_at', '>=', now()->subDays(30))
             ->orderBy('published_at', 'desc')

This code will retrieve all Post models that have a published_at value that is greater than or equal to 30 days ago, sorted by published_at in descending order.

Route Model Binding for Multiple Parameters

Route model binding is a powerful feature in Laravel that makes it easy to retrieve models based on route parameters. With Laravel 10, route model binding has been enhanced to support multiple parameters.

To use route model binding with multiple parameters, you can define a custom binding callback in your route definition. For example, if you want to bind a Post model to a route that has both a year and slug parameter, you can do this:

					use App\Models\Post;

Route::bind('post', function ($value, $route) {
    return Post::where('slug', $value)
               ->whereYear('published_at', $route->parameter('year'))

Route::get('{year}/{slug}', function (Post $post) {
    return view('post', ['post' => $post]);

This code will retrieve the Post model based on the slug and year route parameters, and pass it to the route handler method.

Blade Components

Blade is Laravel’s templating engine, and it makes it easy to create reusable templates that can be used across an application. With Laravel 10, Blade has been enhanced with a new feature called Blade components.

Blade components allow you to define a reusable HTML fragment that can be used in multiple views. For example, if you want to create a custom button component, you can do this:

					<!-- resources/views/components/button.blade.php -->
<button {{ $attributes->merge(['class' => 'bg-blue-500 text-white font-bold py-2 px-4 rounded']) }}>
    {{ $slot }}

You can then use this component in your views like this:

					<x-button>{{ __('Click me') }}</x-button>

This will render a button element with the specified text and styles.

In conclusion, Laravel 10 has introduced several exciting new features that will make web development easier and more enjoyable for developers. The improved routing, enhanced queuing, native container resolution for Artisan commands, Eloquent models as query builders, route model binding for multiple parameters, and Blade components are just a few of the many improvements that you can expect in Laravel 10. We hope that this article has given you a taste of what’s new.



Founder & CEO of Fennec Technologies. PHP & Laravel Developer with 10+ years

Leave a Reply