CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

10 November, 2022

What's new in Laravel 9

 Programing Coderfunda     November 10, 2022     Laravel, php     No comments   

On 8th February 2022, Laravel 9 has been officially released. According to the official website. With this major version release, developers will get 1 year of bug fixes support and 2 years of security updates from the laravel team. Laravel 9 comes with various interesting features and overall improvement of the core framework. Let's find out what's new in Laravel 9.

At a glance Laravel 9

VersionLaravel 9
Release Date8th Feb 2022
Bug fixesUntil Feb 8, 2023
Security fixesUntil Feb 8, 2024
Minimum PHPversion 8

Laravel 9 new features

Laravel 9 required a minimum PHP version 8. New features are Controller route group, Accessors / Mutators improvement, Flysystem 3.x, Eloquent Enum casting, Inline blade templating, Full-text indexing, Enums implicit route binding, newly designed route listing, testing coverage option, new query builder interface, PHP 8 string function included, anonymous stub migrations, SwiftMailer to Symfony mailer and many interesting features. Let's discover these features.

 

Controller Route Group

From laravel 9 we can use common routes as controller group routes which will make route defining more easy and readable. Let's take a look at what it looks like.

use App\Http\Controllers\PostController;
 
Route::controller(PostController::class)->group(function () {
    Route::get('/posts/{id}', 'show');
    Route::post('/posts', 'store');
});

 

The server.php file

The server.php file used for php artisan serve. From laravel 9, it will be removed from the root of the project. This will be included from the inside of the framework.

 

Inline Blade Templating

With laravel 9, we can convert any blade template string to valid HTML tags easily with the help of an inline blade template. Here an example is given below.

use Illuminate\Support\Facades\Blade;
 
return Blade::render('Hi, {{$name}}', ['name' => 'Jhon']);

 

Flysystem 3.x

In Laravel 9, the storage facade will use the Flysystem 3.

 

Anonymous Stub Migrations

To prevent migration class name collisions we can use anonymous stub migration features in laravel 9. Laravel 9 will use this feature as default for the command php artisan make:migration

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
 
return new class extends Migration {

    public function up()
    {
        Schema::table('people', function (Blueprint $table) {
            $table->string('name')->nullable();
        });
    }
};

 

Accessors / Mutators Improvement

From laravel 9, we can easily define eloquent model accessors and mutators every easily with sort syntax which is a very intuitive syntax.

 

Before laravel 9

public function getNameAttribute($value)
{
    return strtoupper($value);
}
 
public function setNameAttribute($value)
{
    $this->attributes['name'] = $value;
}

In laravel 9

use Illuminate\Database\Eloquent\Casts\Attribute;
 
public function name(): Attribute
{
    return new Attribute(
        get: fn ($value) => strtoupper($value),
        set: fn ($value) => $value,
    );
}

 

Enum Eloquent Attribute Casting

Like an as eloquent date, number and other types. Now we can cast eloquent attributes to Enum.

use App\Enums\PostStatus;

protected $casts = [
    'status' => PostStatus::class,
];

 

Full-Text Indexes

In a table definition, we can use full-text indexes in laravel 9.

$table->text('bio')->fullText();

In query

DB::table('users')
    ->whereFullText('bio', 'developer')
    ->get();

 

Checked / Selected Blade Directives

Making checked box checked/unchecked, select box selected state. Now you can use the blade directive.

<input type="checkbox"
        @checked(old('active', $user->active))
        name="active"/>
<select name="user_id">
    @foreach ($users as $row)
        <option value="{{ $row->id }}" @selected(old('id') == $row->id)>
            {{ $row->name }}
        </option>
    @endforeach
</select>

 

Enums Implicit Route Binding

enum Category: string
{
    case Fruits = 'fruits';
    case People = 'people';
}
Route::get('/categories/{category}', function (Category $category) {
    return $category->value;
});

 

SwiftMailer to Symfony Mailer

Laravel 9 will be moved from SwiftMailer to Symfony Mailer. Here is the upgrade guide from SwiftMailer to Symfony Mailer.

 

Pagination - Bootstrap 5

Laravel 9 included bootstrap 5 pagination view. To use bootstrap 5 pagination view add this line in your app service provider inside the boot method.

use Illuminate\Pagination\Paginator;

public function boot()
{
    Paginator::useBootstrapFive();
}

 

Functions and New Helpers

The \Illuminate\Support\Str facade will use PHP 8 string function internally for str_contains, str_starts_with and str_ends_with

Helper

str('Laravel')->append(' Article');
// 'Laravel Article'

str()->snake('LaravelArticle');
//laravel_article

//HTTP redirect to a name route
return to_route('posts.show', ['post' => 1]);

 

Query Builder Interface

Laravel 9 introduce a new query builder interface.

return Model::query()
	->whereNotExists(function($query) {
		// $query is a Query\Builder
	})
	->whereHas('relation', function($query) {
		// $query is an Eloquent\Builder
	})
	->with('relation', function($query) {
		// $query is an Eloquent\Relation
	});

 

New route list design

Laravel 9 comes with a beautiful route list design in CLI with colour highlighted HTTP verb. We'll see the defined route list with the command php artisan route:list


New Test Coverage

A new test coverage option was added in Laravel 9. You will get the test coverage by artisan command
artisan test --coverage. Here is the sample output.

  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook

Related Posts:

  • Lang App::setLocale('en');Lang::get('messages.welcome'); Lang::get('messages.welcome', array('foo' => 'Bar')); Lang::has('messages.welcome'); Lang… Read More
  • Laravel Route Route::get('foo', function(){});Route::get('foo', 'ControllerName@function'); Route::controller('foo', 'FooController');Table of ContentsRESTful… Read More
  • Laravel Redirect return Redirect::to('foo/bar');return Redirect::to('foo/bar')->with('key', 'value');return Redirect::to('foo/bar')->withInput(Input::get()… Read More
  • Laravel File File::exists('path');File::get('path');File::getRemote('path');Get a file’s contents by requiring itFile::getRequire('path');Require the given f… Read More
  • Laravel Config Config::get('app.timezone');get with Default valueConfig::get('app.timezone', 'UTC');set ConfigurationConfig::set('database.default', 'sqlite');… Read More
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • Spring boot app (error: method getFirst()) failed to run at local machine, but can run on server
    The Spring boot app can run on the online server. Now, we want to replicate the same app at the local machine but the Spring boot jar file f...
  • Log activity in a Laravel app with Spatie/Laravel-Activitylog
      Requirements This package needs PHP 8.1+ and Laravel 9.0 or higher. The latest version of this package needs PHP 8.2+ and Laravel 8 or hig...
  • Laravel auth login with phone or email
          <?php     Laravel auth login with phone or email     <? php     namespace App \ Http \ Controllers \ Auth ;         use ...
  • Failed to install 'cordova-plugin-firebase': CordovaError: Uh oh
    I had follow these steps to install an configure firebase to my cordova project for cloud messaging. https://medium.com/@felipepucinelli/how...
  • Vue3 :style backgroundImage not working with require
    I'm trying to migrate a Vue 2 project to Vue 3. In Vue 2 I used v-bind style as follow: In Vue 3 this doesn't work... I tried a...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (68)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • September (100)
  • August (50)
  • July (56)
  • June (46)
  • May (59)
  • April (50)
  • March (60)
  • February (42)
  • January (53)
  • December (58)
  • November (61)
  • October (39)
  • September (36)
  • August (36)
  • July (34)
  • June (34)
  • May (36)
  • April (29)
  • March (82)
  • February (1)
  • January (8)
  • December (14)
  • November (41)
  • October (13)
  • September (5)
  • August (48)
  • July (9)
  • June (6)
  • May (119)
  • April (259)
  • March (122)
  • February (368)
  • January (33)
  • October (2)
  • July (11)
  • June (29)
  • May (25)
  • April (168)
  • March (93)
  • February (60)
  • January (28)
  • December (195)
  • November (24)
  • October (40)
  • September (55)
  • August (6)
  • July (48)
  • May (2)
  • January (2)
  • July (6)
  • June (6)
  • February (17)
  • January (69)
  • December (122)
  • November (56)
  • October (92)
  • September (76)
  • August (6)

  • Failed to install 'cordova-plugin-firebase': CordovaError: Uh oh - 9/21/2024
  • pyspark XPath Query Returns Lists Omitting Missing Values Instead of Including None - 9/20/2024
  • SQL REPL from within Python/Sqlalchemy/Psychopg2 - 9/20/2024
  • MySql Explain with Tobias Petry - 9/20/2024
  • How to combine information from different devices into one common abstract virtual disk? [closed] - 9/20/2024

Laravel News

  • Auto-translate Application Strings with Laratext - 5/16/2025
  • Simplify Factory Associations with Laravel's UseFactory Attribute - 5/13/2025
  • Improved Installation and Frontend Hooks in Laravel Echo 2.1 - 5/15/2025
  • Filter Model Attributes with Laravel's New except() Method - 5/13/2025
  • Arr::from() Method in Laravel 12.14 - 5/14/2025

Copyright © 2025 CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda