Get a quote
Architecture

What is Laravel: ready tools, rules written for your business

Laravel in a proposal is a statement about the shape of your code, not about your business: the name cannot say which part of the system was built for the way you work.

Algoriel 14 min read
What is Laravel: ready tools, rules written for your business
In this article
  1. What Laravel is: not a language, not a ready-made site, but an open source framework written in PHP
  2. What Laravel is used for: brochure pages and incoming requests sit in one codebase
  3. A framework arrives with the work that repeats in every system
  4. Your own rules never arrive written: the framework hands over the tool, the trade writes the rule
  5. Which items come from the framework, and which ones are your call
  6. The framework can stay while the order of the work is rebuilt
  7. The name Laravel tells you how the code is arranged, not whether the rules are right

Laravel is an open source framework written in PHP, and it settles where the code of a system lives rather than what that code decides. The screens, and the conditions a record has to meet before it is accepted, are written on top of it. So a framework name in your paperwork guarantees less than it appears to.

What Laravel is: not a language, not a ready-made site, but an open source framework written in PHP

Several different things get packed into one word. PHP is the programming language a system is written in. Laravel is a framework written in that language, and what it decides is where each piece of code belongs. Its own installation page puts the job plainly: a framework supplies a structure and a point to start from when an application is built. The same page notes that PHP has to be present on the machine before any Laravel application can be created.

Structure is worth unpacking, because it is the part of the definition a buyer can actually use. Route definitions live in a known place. The classes that map onto database tables live in another. The rules that incoming input is checked against live somewhere else again. None of those addresses change from one project to the next, which is why a developer opening the codebase for the first time knows where to look without anyone pointing.

Producing the screens, and the rules behind them, from nothing is a separate piece of work, whose scope the web development page describes; this article only draws the line around it. A theme ships finished screens and finished rules, which is where it parts company with a framework: a framework ships neither, and offers only the place where each of them gets written.

A licence writes no business rules, and that is the only part of the licence question this article needs. Laravel is distributed under a permissive open source licence, the MIT text; what a licence of that kind grants and never takes on is the subject of the article on open source.

A site built with a tool like WordPress arrives with working screens attached, which is the theme-versus-framework question approached from the other end. One route begins with screens that already exist and the other begins with an empty structure, and neither is being ranked here. Where the decision really turns is set out in the guide comparing WordPress with a custom corporate site.

An inventory entry and a preference are not the same thing, and a framework name can be either. The KGM SsangYong corporate site reached us already serving its pages, with the name sitting in its documentation as a fact to work around rather than a decision to make. Read that same name in a proposal still under discussion and it is somebody’s choice, open to argument.

What Laravel is used for: brochure pages and incoming requests sit in one codebase

The worry underneath this question is usually a financial one. If the public pages are one system and the requests arriving from those pages are another, each of them gets bought, hosted and maintained separately. Diotek’s HVAC site answers it inside a single codebase: Inertia handles page transitions in the browser while routing and validation stay in Laravel; requests and content share one MySQL schema.

Sharing a schema has a mechanical consequence worth naming. Nothing has to be copied from one store into another, so there is no transfer step to write, watch and repair. Where separate systems exist, that step is the part that fails quietly, and the argument about which side failed tends to outlast the fault itself.

The same arrangement carries a cost, and it should be said out loud rather than left for later. When content and requests live in one schema, a change on the content side reaches the request side, and each side gets considered in the same maintenance pass. The choice is not free. It trades a transfer layer for coupled changes, and which trade suits you depends on how often each side moves.

On the KGM SsangYong corporate site the model pages, the catalog read path and the store of vehicle image files were all handled as parts of the same installation, which is to say that a framework carries more than pages. So the question has an answer that has nothing to do with new builds at all: often enough, Laravel is simply the thing a currently running system stands on.

A framework arrives with the work that repeats in every system

Laravel’s documentation names what it hands over, and a buyer meets most of those names in a proposal. Routing binds an incoming address to a behaviour, and the routes themselves sit in the project’s route files. Validation ships a set of ready rules for checking what arrives, down to asking whether a value already exists in a database table. Eloquent reads and writes records through a model that corresponds to each table. Migrations put the schema definition under version control so a team can share it. Queues move work that would take too long during a request into a background job. Authentication supplies the tools for signing a user in.

Picture the alternative first. Written fresh in each project, every one of those jobs would carry fresh mistakes, and only the team that wrote them would know where the mistakes sat. Binding addresses to code and checking what a form sends are not interesting problems; they are problems every system has already solved somewhere. That is the saving: not how much code gets written, but how many times the same code gets written.

Which half of a system carries which job is the subject of the article on front end and back end; the axis here is a different one. At Diotek, page changes are handled in the browser while whether a form is accepted is decided on the server, and what matters for this article is not which half owns the job but whether the tool doing it arrived with the framework or had to come out of the trade.

A ready tool is no evidence that the tool has been set up for the way your work runs. The framework was in place on the KGM SsangYong corporate site, and every catalog page view was still paying for the same query against MySQL; arriving ready does not mean arriving configured.

What a framework really delivers, then, is a list of questions with the answers left blank. The rule set is there and the queue mechanism is there, but which rule attaches to which form, and which work belongs in a queue at all, are not. Ready describes the job, never the tuning of it, and the word covers less than a reader expects it to.

Your own rules never arrive written: the framework hands over the tool, the trade writes the rule

Start with the evidence rather than the tool. At Diotek a survey request is about a room; a service request is about an installed unit, and capacity depends on the room, so nobody can quote a unit before seeing the space. A validation rule is able to test whether a field is empty and unable to test whether that field ought to be required here and absent there, because the reason for the difference sits outside the code. How each is kept as its own record is covered in the article on separating bookings from service calls.

Nobody has written the trade down inside a library, which is the limit worth understanding. A tool can be told that a field is mandatory; it cannot work out that the same field matters on a survey and means nothing on a service call. When that never gets explained to whoever writes the code, nothing visibly breaks. The form is accepted, a record lands, no error appears anywhere, and the record itself is the wrong thing.

A copy that gets missed surfaces much later, as a record nobody should have accepted, and that is the real reason to ask where a rule physically lives. Spread across several places, adding or removing a mandatory field becomes a hunt for every copy of the rule. Defined in one place, the same change never reaches the screen code.

How often the underlying data moves is what settles a caching decision, and nothing in the framework settles it for you. On the KGM SsangYong corporate site the record reads: Catalog queries are served from Redis; MySQL only runs when the underlying data changes, not once per visitor per page load. When a cached answer has stopped being true is part of that same decision, and it is nowhere in the framework either. Reads, in other words, carry decisions of exactly the same kind as forms do.

What would not be touched was settled before anything else on the KGM SsangYong site, and only then did the work go into the places carrying the page weight. An inherited system already has its rules written somewhere; reading is the only way to find out where.

Which items come from the framework, and which ones are your call

Some items arrive with the framework, some never do, and that gap is a decision space rather than a shortcoming: the last rows carry the most weight for exactly that reason. Read along a row, and the question of who decides what falls into the cells to the right of whichever item you placed there.

Work itemArrives with the frameworkWritten for your businessWhat changing it later involves
Which address maps to which behaviourRouting, which binds an incoming address to a behaviour; the routes sit in the project’s route filesWhich paths exist at all: at Diotek each request type opens through a path of its ownA new request type needs a new path and a new kind of record
Checking what a form sendsThe validation component and its ready rule set, including the check for whether a value already exists in a tableWhich field is mandatory on which request: a room and a date for a survey, an installed unit for a service callDefined in one place, the field set changes without the screen code being opened
Where a record sits in the databaseReading and writing through a model that corresponds to each table, with migrations that version a schema changeWhich information belongs in which record: at Diotek requests and content share one MySQL schemaTouching the schema concerns every screen that reads that record
Which read is answered from a cacheThe cache is an item named separately in the stackWhich reads come from the cache, and when a cached answer expires: catalog reads on the KGM SsangYong siteA new kind of content reopens the question of when the cache goes stale
What a file name tells youNaming and folder conventions for vehicle image files do not arrive with the frameworkThe rule deciding where a vehicle image file belongs was written afterwards on the KGM SsangYong siteIgnore the convention once and adding a model turns into a file hunt

The money sits in the right-hand column, which is the one most often skipped: what a later change costs depends on where the item started. Read the middle column as a starting point rather than a promise, because the same item closes with a framework tool in one engagement and needs a separately named component in the next. No single direction is being imposed here.

One change is cheap and another is expensive inside the very same system, and a framework name is not what decides which is which. A schema change pulls in every screen reading that record. A change to the mandatory field set stays inside a single definition. The rows, read together, say that much.

The framework can stay while the order of the work is rebuilt

The reasonable worry at this point is about freedom. If the framework is fixed, what is left to decide? On the KGM SsangYong corporate site the framework and the front-end set had to stay, because the site is maintained by the brand’s own team. The order of the work was rebuilt anyway: vehicle image files were moved into one naming convention and catalog reads were put behind a cache, none of which required touching the framework.

The inference is the load-bearing part of this section. If those arrangements could be rebuilt without the framework being touched, then they were never the framework’s call to begin with. A fixed framework locks the tool list. It does not lock the order of the work.

On that site the cache was the only component that joined the stack, and everything else was left as it stood. The jQuery requests on the model pages were therefore not swapped for something newer but worked through one at a time, the front-end set being frozen as well. That is the price of working this way, and the project record names it rather than hiding it: instead of a clean rewrite, the job became a set of smaller moves inside a shape somebody else had drawn.

Something that looks like a file-layout problem may turn out to be imposed from underneath, which is why the line cannot be drawn on an inherited system without reading the code first. Knowing in advance which part is independent of the framework is not easy. On that job the line became clear only after the reading pass, and the limit of the intervention was drawn there.

Your business rules do not change because a version changes; what a release transition touches is the part of your code that faces the framework. The framework’s own calendar belongs in the same picture, and Laravel publishes a release and support policy: bug fixes and security fixes for a given major release stop after a stated period, and the periods themselves are written on the policy page. Who carries that watching job is the subject of the article on maintenance after launch.

The name Laravel tells you how the code is arranged, not whether the rules are right

The name says where code gets written and says nothing about whether what was written fits the way a business runs. The framework was in place, and the name was the same one it is today, on the day the KGM SsangYong installation was serving its pages with vehicle images in an inconsistent layout and no clear rule about where a file belonged. Nothing about the name changed when that rule was finally written.

Route files, record classes and validation rules sit in the same relative places in every project, so an incoming team reads a map it already knows instead of one invented for this system alone. That is what the name guarantees, and it is not nothing: whoever opens the code next knows the arrangement in advance. The tool list on the KGM SsangYong site was kept for the same reason, since those are the tools the team carrying the maintenance already knows.

Familiarity is still not fitness. Skip the testing and what you hold is a name and a running system, neither of which tells you anything about fit; whether a rule suits your business is tested, not read off a name. Which scenarios do that testing is set out in the article on what to check before accepting software.

Which screens and which rules were written for your business, where do they live, and what else moves when one of them moves. That is the short list worth asking for. Whoever built or maintains the system has the answers; a framework name has none of them and only tells you where to look.

If a system runs for you and nobody can say which part was written for your business, reading the code and listing what stays and what changes is what the takeover page covers.

Key takeaways

  • Laravel is a framework, not a language: PHP is the language, and the framework only settles where the code sits.
  • The jobs a framework hands over have names: routing, validation and record access repeat in every system, so nobody writes them from scratch.
  • Which field is mandatory on which request comes out of the trade, not out of the validation tool.
  • A frozen framework does not freeze the work: file naming and the choice of which reads are cached stay open.
  • A framework name guarantees where code sits, never whether the rules fit; fitness shows up in acceptance testing.

Questions this article answers

  • Is Laravel a program, a ready-made site, or a programming language?

    It is none of those. Install it and there is nothing a visitor can look at, because what Laravel settles is where each piece of code belongs: PHP is the programming language, and Laravel is the open source framework written in it. Screens, and the conditions under which a record gets accepted, are written above that structure for one particular business. Ask which part of yours was written for your work.

  • If the framework brings the repeating work, what am I paying for?

    The screens and the rules are what you pay for. Diotek's survey request centres on a room while its service request centres on an installed unit, and that difference comes out of the trade rather than out of any tool. Routing and a validation tool do arrive with the framework; which paths exist, and which field is mandatory on which request, get written by someone who understands the work. Your proposal should name those screens and rules.

  • If a proposal says Laravel, am I buying a ready-made theme or something written for us?

    You are not buying a theme. A framework name in a proposal promises no finished layout and no ready business rule, because what Laravel settles is where the code of your system lives. What a visitor sees, and the conditions a record has to meet before it is accepted, get written above that. Ask in writing which screens and which rules will be built around the way you actually work.

  • Does a framework upgrade change our business rules?

    Not on its own. Laravel publishes a support policy: bug fixes and security fixes for a release stop after a stated period, and the periods sit on the policy page. None of that reaches what a rule says. Your rules live in the code of the application, and a major release means revisiting the part of that code which faces the framework. Find out whether they live in one place.

  • If we inherit a Laravel system, can another team pick it up?

    It can. KGM SsangYong's corporate site kept the tools already in use, because the team that maintains it knows them. The same logic runs one level down: a shared convention means an incoming team finds routing and validation where it expects them, rather than in a layout invented for that single system. Agree early on which convention the people who will read your code recognise.

About the author

Algoriel

Remote web software agency

We build custom web and mobile software for businesses. Here we answer the questions that come up while your software is being built and after it goes live.

Tags:
  • laravel
  • web framework
  • php
  • form validation
  • business rules

Have a system to build?

If there is a system you want built, the quote form is the place to describe it.