The choice of which framework to use while developing an application depends on many factors, but just like any other application framework, Laravel does have its pros and cons. Leaving inside the hate, I would like to focus on the advantages of using the Laravel framework. Before I jump into the magic of Laravel, I would like to discuss why you would use a framework for developing an application in the first place. What are the potential pitfalls of not using a framework and developing everything on your own?
To understand the potential pitfalls of developing an application without using a framework, let us assume, that we have to build an application which uses a Model-View-Controller (MVC) architectural pattern. The moment you start setting up the architecture, there would be a lot of architectural choices which we would need to make regarding the structure of the application. Here are a few immediate questions that come to my mind as soon as I think of developing complete application architecture all by myself.
Which component of the application should I start working on first?Should I install all the third-party dependencies and libraries first?Taking into consideration the scalability of the application, what sort of a library should I be using for database interaction using model classes. Should I use PDO, or is there a better option available?How will I manage dependency injection?How should I document the complete architecture considering that there would be more developers working on the same application at a later stage?
If these questions look overwhelming, then let me tell you we are just getting started. It is quite evident that if you are not coming from MVC architecture of programming, then these questions itself are new to you. There is a higher possibility that you might have never asked these questions to yourself if you have not used a framework before. If this is the case, then this reason itself should be good enough for you to adopt the Laravel framework for application development. Laravel takes care of all these low-level details for you and gives you an elegant and working architectural pattern. Laravel provides you with a structure where Model, View and Controller interact with each other seamlessly. Apart from this, Laravel provides you with many different functions built into the framework itself so that you can focus on writing the business logic of your application. Hence, you end up saving time and energy, which otherwise would have spent on find solutions to these low-level problems.
Let us try to imagine a situation wherein you are developing an extensive application where you are not using a framework or building a framework of your own. When the number of users increases or more features have to be added, you would need more developers to develop and maintain the application. During the on-boarding of the new developers, you would not only have to explain to them the entire application framework that has been built by you. This would be in addition to explaining the other processes of software development followed by your team.
For this reason itself, the new developers would have to go through the learning curve of understanding the new architecture that has been developed by you. This sort of problem is eradicated if you use Laravel because it will then bring in the consistency of application development. Laravel has detailed documentation, and the new developers would not have to go through the learning curve of using a new framework. You can easily hire a Laravel developer and get started.
When an application is built using a standardised framework like Laravel, add additional developers to the team becomes easy. Its is because you hire a Laravel developer and he would be bee able to understand the code because its all follow the same pattern.
If this sounds interesting already and encouraging enough to use a framework for your next application, then let me share a few advantages that Laravel has over the rest of the PHP frameworks. These advantages certainly make Laravel one of the primary contender for the best PHP Framework.
Laravel offers user authentication out of the box. Any modern-day web application would need user authentication, and you hardly have to do anything to set this up with laravel framework. When you set up user authentication, Laravel creates all the important components such as the user model, the register and the login controller and corresponding views as well. It is super easy to extend any of these components to further add functionality as per the desired business logic of your application.
Apart from this, Laravel also offers the socialite package, which enables your application to authenticate users using various social networks such as Facebook, Google Plus and Twitter. There is a bare minimum configuration that you have to do to get this working.
Laravel also focuses on convention over configuration approach. This essentially means that if you follow the naming conventions for different components, you hardly have to focus on the configuration. If you follow the naming convention Laravel itself takes care of many low-level details, and everything starts working magically. If you are coming from a conventional PHP programming background, this might seem overwhelming to you in the beginning. But once you get the hook of it, you would not want to go back ever again.
It’s impossible to imagine any modern-day application without email notifications. With Laravel sending out email notifications is super easy. Apart from SMTP and Php mail function, Laravel provides support for various notification email services such as Mailgun, Mandrill, SparkPost, Amazon SES, SendMail etc. These services enable you to start sending mail through a local or cloud-based service quickly. You can also send notifications Via Slack and SMS using Nexmo. All these services are supported out of the box.
Laravel also supports markdown in email templates which enables you to create notification emails in a fraction of time.
Artisan for me is the most elegant and useful feature offered by Laravel. Artisan is the command-line interface for Laravel and helps developers to automate many tasks using the command line itself. Artisan commands can be used within the application itself, and Developers can also create additional Artisan commands.
There is an Artisan command for all the common tasks that you can think of, such as, creating a model, creating a controller, creating a database seeder, migrating the database, so on and so forth. The list is endless. Why I say it’s elegant is because all you have to do is pass command and Laravel takes care of it.
Laravel supports PHPUnit out of the box and makes test-driven development for PHP applications super easy. It’s easy to write unit tests for your application and ensure that things are working the way you want them to.
Once you start working with Laravel, you would soon realise that Laravel gets it inspiration from Ruby on rails and more functional languages rather than Java. It’s evident even from the way Laravel handles dependency injections. Though it is possible to achieve complex patterns when it comes to dependency injection, contrary to that, Laravel offers simple methods to create global helper functions. With the help of global functions and facades, one can easily include dependencies wherever needed.
Laravel follows a Model View Controller (MVC) architectural pattern and hence separates the business logic from the view. This approach has various advantages. Though you need to understand what Model-View-Controller (MVC) is to understand the benefits, and whether your application requires such an architectural pattern or not.
Eloquent is laravel ORM (Object Relationship Mapping) more information
https://en.wikipedia.org/wiki/Object-relational_mapping . Eloquent makes fetching data from the database super easy. Creating relationships between tables and fetching data from these tables is facilitated by Eloquent as well. Eloquent also lets you create various joins in tables and offers many helper functions which make interacting with database super easy. You hardly ever have to write SQL queries or functions. Thanks to Eloquent Laravel offers out of the box support for these databases:
– SQL Server
You guessed it right, this essentially means that as long as you using Eloquent you don’t have to worry about compatibility with any of the above databases. Also making a switch from one database to another is super easy. Now try to imagine the scalability that this gives to your application. Let me explain that with an example, let’s assume you start with an application which has a small user base in the beginning. Since the number of users is less and the app is in its initial stages, you decide to use MySQL as the database. Later on, the user base of your application grows to a considerable level, and you might have to switch SQL Server as your database. Making this change is as easy as changing specific configuration details in Laravel.
While developing an application, there are often certain time-consuming tasks. These tasks need to be deferred to a later time so that they do not create a bottleneck in the user’s process. A perfect example of this sort of a task may be the generation of a PDF report a CSV file that the user has requested. Laravel’s queue service provides a unified API to defer such tasks for a later stage in the application.
Talking about Laravel’s Command Scheduler, it’s a perfect replacement for those fussy Cron Jobs. Many times there are specific tasks for which developers have to set up Cron jobs. A perfect example of such a task would be sending out weekly newsletters to all the subscribers. For setting up the cron jobs, the developers have to login into the server using SSH and set up the cron jobs at the machine level. This becomes a hassle over a period of time because these cron jobs are not a part of the version control system such as GIT. Laravel’s Command Scheduler provides a clean API schedule various tasks using the inbuilt functions. You don’t have to log in to your machine’s terminal using SSH, and all these scheduled jobs are a part of your code.
The way Laravel handles routing is straightforward and intuitive. There is a single web.php file to handle all your web routes. If certain routes required common middleware, they could be grouped easily in Laravel.
A perfect example of this would be certain pages in your application, which requires user authentication before the user can view them. All these pages can be grouped and go through the Auth middleware to ensure that these pages can be viewed only by users who have logged into the system. Laravel also offers an elegant route model binding wherein a model can be bound to a route. With the help of this, a view can be returned directly from the route itself without even accessing the controller.
Laravel uses Composer for dependency management and for autoloading as well. The Composer helps you to install Laravel packages, which makes dependency management a breeze. At any point in time, you can check your package.json file and see what all dependencies your application is using. The Composer also gives you the benefit of being able to update your dependencies using single Composer command.
The Blade is Laravel’s templating engine. Blade is a step ahead in separating your views from your business logic. Blade keeps your view code super clean. The importance of Blade would become more clear once you understand the model-view-controller architectural pattern and how Laravel implements it. Blade also offers you template inheritance because of which you can divide your late templates into sections and inherit those sections into other view files. With the help of Blade, you can create logical smaller sections which can then be included to form a complete view.
This is a bit of a grey area. When I started working with Laravel framework first, I did have a problem going through the documentation. Everything is not documented, and there are certain things which would start working magically, the moment to start following the naming conventions. But there is API documentation available which lists each, and every class and method declared in Laravel framework. Once you get the hook of it and come to know how to use the Laravel documentation to your advantage, I promise, you would have no complaints at all.
Laravel does have an active community. The moment you face any problem, you can search and would certainly come across many stack overflow posts which cater to your question. Apart from an active community on stack overflow, there are Laracast’s discussion forums. You can register for free on Laracast to be a part of the discussion forums and the community out here is very active.
I think these advantages are enough to get you excited about the Laravel framework. Though terming it as perfect would certainly be an overstatement, but for sure, Laravel definitely is one of the best PHP frameworks out there.