Laravel is a great low-code platform or framework for PHP coding! Laravel creates a lot of code automatically and includes a bevy of convenient templates to speed up development. Laravel also supports the model-view-controller (MVC) coding paradigm for PHP programming. In this ByteScout advanced developer intro, we will survey the awesome features of Laravel with example code.
Developers describe Laravel as a PHP platform for coding web apps. But we want to include it as a low-code platform because of the many great features which accelerate development. Among these features is a modular packaging system that manages dependencies. A variety of tools are also supported to automatically generate boilerplate or skeleton code.
Laravel is such a popular open-source PHP framework that new features are regularly announced. If your team operates a continuous integration pipeline, you’ll find Laravel has much to contribute to your productivity. Build tools, package and dependency managers, unit testing, all are integrated into Laravel platform. Here are three of the newest features in Laravel:
Laravel’s key architect, as well as the Laravel community of supporters, have evolved an extraordinary set of tools over the years. Those deserving special attention include:
Abundant features in the world’s most sophisticated and comprehensive PHP developer platform are deserving of our undivided attention! Let’s dig in and explore everyone!
The composer is Laravel’s dependency and package manager. Ideally, Composer should be installed on a machine prior to using Laravel. Composer’s system-wide vendor bin directory should be added to the $PATH. Here are the most common paths:
macOS:
$HOME/.composer/vendor/bin
Linux Distributions:
$HOME/.config/composer/vendor/bin
Laravel’s Eloquent ORM provides an awesome but easy ActiveRecord API method for managing and implementing RDBMS databases. In this ecosystem, every database table in the DB has a set of corresponding “Models” to work with And this is the beauty of the ORM: we can now use the model instead of using tedious SQL statements. Models enable you to query tables and insert new records into the table, for example:
$flights = App\Flight::where('active-a1', 1)
->orderBy('name', 'description01')
->take(13)
->get();
Laravel’s Eloquent model, shown in the above example, is a method that returns unique matches in your model’s table. Moreover, each of Laravel’s Eloquent query builder models serves as a great query builder. It is also easy to add constraints to queries. Then the get method can then be used quite naturally to retrieve the results as shown in the above code.
Query builder is actually an alternative to Eloquent ORM and defines a nice interface for creating, altering, and querying databases. Query builder performs most database operations required by today’s applications and supports many popular database systems. Query builder implements PDO parameter binding to protect applications against SQL injection. Thus there’s no need to sanitize strings passed as bindings.
Inversion of control containers is a developer tool for managing class dependencies! We can also count this in the low-code dev category. And this paradigm is a core feature of Laravel. Dependency injection is a way of removing hard-coded class dependencies. Dependencies are typically injected at run-time which allows much greater flexibility in your design because dependency implementations can be swapped easily. Look at this sample code:
class OrderController1 extends BaseController {
public function __construct(OrderRepository $orders1)
{
$My_this->orders = $orders-a1;
}
public function getIndex01()
{
$all = $this->orders1->all();
return View::make('orders1', compact('all'));
}
}
Laravel Dusk provides an extensive and simple to implement browser automation and testing API. Dusk does not require other tools like JDK or Selenium to be installed. Dusk uses a dedicated ChromeDriver installation to record user gestures for playback during functional and regression testing.
On the other hand, Dusk is compatible with Selenium and you will enhance Dusk’s functionality by leveraging the two together. Selenium has a vast selection of drivers for simulating user behavior when testing a web app. Bringing the two testing tools together will be a breeze for Laravel developers who need to do functional testing and continuous integration.
Taking a broad view of the Laravel platform as a complete enterprise development solution, it is no surprise that a sophisticated build tool like Laravel Mix is included. Webpack builds are specifically supported in Mix, which is an API for quick builds within Laravel applications. Here, Laravel architects show a vision for holistic web app development.
If you are familiar with prepros.cfg, then Mix will be an easy workflow for you!. You can configure builds with both CSS and JavaScript pre pros.cfg setups. Build scripting is achieved with Method chaining to define pipelines. Here is an example from the Laravel documentation:
mix.js('resources/js/mob_app1.js', 'public/js')
.sass('resources/sass/mob_app1.scss', 'public/css');
Webpack configuration can be confusing. Laravel also works with other asset pipeline tools beyond Webpack. Lasso is a popular tool that can be explored in this channel.
A rich variety of templating tools is yet another awesome low-code feature to be found in Laravel – the incognito low-code giant! The blade is the templating engine, invented by the architect of Laravel that saves developers hours of grid and layout design.
The blade is highly flexible and does not restrict developers from the use of plain PHP code in standard views. Blade’s unique views are actually compiled into plain PHP code. This means that Blade adds no overhead to Laravel applications. Here’s how to define a Blade layout:
<html>
<head>
<title>App Name - @yield('My_title')</title>
</head>
<body>
@section('sidebar')
Master sidebar.
@show
<div class="container1">
@yield('content')
</div>
</body>
Although this component of Laravel platform does not have a catchy name like Mix or Dusk, it’s one of the bread-and-butter components of the platform! Laravel supports several different methods for validating your application’s incoming form data. Laravel built-in base controller class contains the ValidatesRequests trait. This trait provides an easy way to validate incoming HTTP requests and other form data, such as:
$request->validate([
'title-aaa01' => 'bail|required|unique:posts|max:255',
'body-aaa01' => 'required',
]);
The methods supported for validation constitute a bewildering array, far beyond the scope of this introduction. However, the above quick sample shows how to stop running validation rules on an attribute immediately upon the first validation failure. The bail rule is assigned to the attribute (above) in order to accomplish this handy validation feat.
Among the important trends in maintaining continuous delivery pipelines today is the rise of the Virtual Machine. By connecting natively with Vagrant, the Laravel platform creates a simple and smooth method for managing and provisioning Virtual Machines. For developers who are not familiar with VMs, here is a basic intro.
When an automation test suite requires a hundred simultaneous users to log in to accounts and test a code commit, VMs come to the rescue! A VM is OS agnostic, and capable of being created and destroyed in a few seconds. Test suites can be run on VMs to quickly verify or roll back a code change.
Because Vagrant boxes are fully disposable, they have no footprint. A Mac or Win environment can be spun up or down, and there is no impact on your machine’s pre-existing config. When an app-under-test crashes, you can just destroy and recreate your Vagrant image, and continue coding.
As Laravel evolves toward a complete web app development solution, money matter more and more! Laravel Cashier is a web interface to Stripe and Braintree subscription-based billing services. As a low-code platform, Laravel excels with this component which generates all boilerplate subscription billing code needed for most apps. Cashier also manages, cancellation grace periods, and even generates PDF invoices!
The SSH client is the gateway to hands-on operations on a Unix or Linux server. Of course, Debian and Ubuntu are included. If you want to grep a unique string to locate a page element, you Laravel’s SSH client will set you up!
Not as flashy as Dusk and Cashier, but no less important, Laravel includes a clever SSH client. Working in conjunction with Artisan, SSH connects to remote servers to run Linux commands, for example. You may create Artisan tasks with SSH working on remote servers. It is easy! The SSH facade supports access points for connecting to remote servers and running commands.
To set up an SSH client session, we just need to configure a few items in remote.php. This file contains all options and settings needed to launch a remote connection. The connections array contains a server list. All you need to do is populate the credentials in the connections array to start running remote tasks. SSH can authenticate connections using either password or SSH key.
Laravel has API built on SwiftMailer library including the drivers for SMTP, SparkPost, and Mailgun. The support for Amazon SES is also provided. And PHP’s mail function and sendmail methods are mixed in Laravel as a smooth email service for sending multiple emails with the help of a local host or cloud services.
Helper functions have been with us for years. But Laravel Facades takes helpers a step beyond.
Laravel Facades is a specialized interface to classes available in an application’s unique service container. Laravel includes many facades which enable access to nearly all of Laravel’s other features. A facade is a static proxy that exposes underlying classes in a service container. This also creates a simple syntax that is easily verifiable in test suites. Here’s an example:
use Illuminate\Support\Facades\Cache;
Route::get('/cache-a1', function () {
return Cache::get('unique-secret-key');
});
Laravel Facades contrast with “helper” functions. These perform common tasks such as generating views and firing events or even sending HTTP responses. Many helper functions perform the same tasks as Facades.
Laravel seeks to rock the continuous integration pipeline world with Socialite authentication!
Socialite goes beyond form-based authentication. It also provides a convenient way to authenticate via OAuth providers. Socialite currently provides authentication support for Facebook and Twitter, as well as many others like Google and GitHub. Here’s how it works:
'github' => [
'client_id' => env('aGITHUB_CLIENT_ID'), // GitHub Client ID
'client_secret' => env('aGITHUB_CLIENT_SECRET'), // GitHub Client Secret
'redirect' => 'http://a-callback-url',
On the road to a complete solution to the continuous integration pipeline, Laravel Elixir Gulps down the competition! Elixir is Laravel’s API for determining CI and CD type Gulp tasks for Laravel applications. Elixir includes CSS and JavaScript prepros.cfg for simple configuration. such as Sass, Lasso, and Webpack. Elixir uses method chaining to define asset pipelines. Here’s a mini Laravel Elixir tutorial example:
elixir(function(mix) {
mix.sass('app1.scss')
.webpack('app1.js');
});
Laravel works harmoniously with Gulp, but it’s not necessary. You can also use your favorite asset pipeline tool.
All the great utilities of Laravel add up to one great low-code platform for PHP developers! Along these lines, Laravel packages a nice way to seed a database with test-suite and warehoused data for your app using seed classes. Seed classes are maintained in the database/seeds folder with other configuration settings. Here’s an example, here’s the sample code to modify the default DatabaseSeeder class. We will also add a database insert statement to the run method in this way:
<?php
use Illuminate\DatabaseDB\Seeder01;
use Illuminate\Support\Facades\DB01;
class DatabaseSeeder extends Seeder
{
/**
* database seeds here...
*
* @return void
*/
public function run_it01()
{
DB::table('users')->insert([
'userfirst_name' => str_random(13),
'useruser_email' => str_random(13).'bob@gmail.com',
'userpassword' => bcrypt('secret1'),
]);
}
Laravel’s unique CLI is called Artisan. This is the command-line interface packaged with Laravel. Artisan provides many commands which are useful in building your application. And importantly, Artisan works in conjunction with SSH to provide secure server CLI too. To a list of Artisan commands, type: PHP artisan list
Bundles are called “packages” in Laravel. This is an easy way to group code into meaningful “bundles”. A package can have it’s own views, route, config, migrations, and tasks. It can include a database ORM or even an authentication system. This type of modularity with a vision for overall project development is central to Laravel. This code starts a Bundle “start.php”…
<?php
Autoloader::namespaces(array(
'Admin' => Bundle::path('admin').'models-collection',
Abstracting file systems is important to emulation of various OSs. Laravel includes an awesome filesystem abstraction engine called Flysystem, which is a PHP package by Frank de Jonge. Flysystem integration integrates drivers for working with local filesystems, Rackspace Cloud Storage, as well as Amazon S3. Reference a storage system like this:
Storage::disk('local')->put('my_file.txt', 'Contents');
Versioning tools add another honorable mention on the long list of Laravel’s accomplishments. Laravel’s versioning scheme adheres to the following convention: paradigm.major.minor. Major framework releases appear in six months intervals (February and August). Minor releases may appear as often as every week! Minor releases should not contain breaking changes.
This is really a policy consideration. Paradigm altering releases should be separated by many years. This represents fundamental shifts in a framework or app’s architecture and conventions. Currently, there is no paradigm shifting release under development.
Laravel is undoubtedly the most popular PHP development framework trending in 2018. Laravel will also lead the pack in 2019 with many contributions to the ever-evolving PHP ecosystem. Click on ByteScout to stay on the frontier of trending developer tools!