---
tags: magento
GA: UA-167433668-1
title: Magento 2.4 Introduction
description: Magento 2.4 architecture, request flow, etc.
image: https://static.magento.com/sites/default/files8/2020-08/21998_dx_Commercial%20Social%20Share%20Image%20-%20Magento.jpg
---
**Content:**
[TOC]
---
ref: [Magento Website](https://magento.com/), [Magento Doc](https://devdocs.magento.com/)
- A content management system, much like Wordpress.
- Specialized for e-commerce.
- Very robust, more complex than Wordpress.
- Has component (plugin/extension) marketplace eco-system.
- Components
- Themes: used to modify appearance
- Module: used to modify/extend behaviour
- Language: used for translation
Architecture
---
ref: [Architectural Overview](https://devdocs.magento.com/guides/v2.4/architecture/archi_perspectives/ALayers_intro.html)
[](https://devdocs.magento.com/guides/v2.4/architecture/archi_perspectives/arch_diagrams.html)
Layered architecture enables separation of presentation and business logic.
### Presentation Layer
Consists of:
- view elements
- layout
- block
- templates
- controller
HTML is generated from a tree of view elements. These view elements could be:
- Blocks
- dynamic content
- can contain named child view elements held in `as` attribute
- Containers
- *ordered* group of children view elements
> **The browser forms a product web page by asking the view element tree to render itself into HTML.** Containers and blocks emit HTML that encloses their children appropriately. Blocks can generate their content using static HTML, Knockout JS scripts, and PHTML.
> -- [Presentation Layer | Magento 2 Dev Doc](https://devdocs.magento.com/guides/v2.4/architecture/archi_perspectives/present_layer.html)
Themes
- are presentation layer components
- resides in a unique directory
- contains custom page layouts, templates, skins, and language files
Inter-layer interation
> Web users interact with components of the **presentation layer** to select actions that initiate calls to the underlying layers. **Presentation layer components** make calls to the **service layer**, which in turn sends requests to the **domain layer**.
> -- [Presentation Layer | Magento 2 Dev Doc](https://devdocs.magento.com/guides/v2.4/architecture/archi_perspectives/present_layer.html)
APIs
- REST
- SOAP
- GraphQL
### Service Layer
- contains *service contracts*, which defines the behaviour of the implementation
- provides access to REST/SOAP API (by binding service contracts to the APIs)
- provides API for others modules
Service contract clients:
- controllers of Presentation Layer
- web services (from external apps via REST/SOAP API calls)
- other modules through service contracts
Service contract is defined by:
- service interfaces (in the `/API` directory, example: [Catalog API :arrow_upper_right:](https://github.com/magento/magento2/blob/2.4/app/code/Magento/Catalog/Api))
- data interface (in the `API/Data` directory, example: [Catalog API/Data :arrow_upper_right:](https://github.com/magento/magento2/blob/2.4/app/code/Magento/Catalog/Api/Data)), contains getters and setters for entity table entries and extension attributes.
Service contracts provide:
- repository interfaces
- management interfaces
- metadata interfaces
### Domain Layer
Holds **business logic** that defines operations that can be performed on particular types of data. Typically does not contain resource-specific / database-specific information.
- defines **generic** Magento data objects / models that contain business logic.
- (optional) implements service contracts
#### Model
**Domain-layer model** refereces **resource model**, which is used to retrieve data from database. Database logic (i.e. MySQL) is stored in resource model.
#### Access
- loosely coupled (recommended): using service contracts for one module to access another's domain layer.
- tightly coupled (not recommended, but sometimes necessary): direct call from another module
- plugging: event hooks, plugins, `di.xml` (dependency injection)
### Persistence Layer
Uses active record pattern strategy. Model object contains *resource model* that maps to database rows. Resource model's functions include:
- executing CRUD requests
- additional business logic, e.g. data validation
#### collection
A special resource model, implemented as a *class*, usually used for returning multiple items from a query. Similar to a SQL `WHERE` clause.
#### Entity-Attribute-Value (EAV) models
A resource model that uses EAV resource has its attributes spread out over multiple MySQL tables, e.g. `Customer`, `Catalog`, `Order`.
Request Flow
---
ref: [dckap](https://www.dckap.com/blog/request-flow-in-magento-2/), [magento stackexchange](https://magento.stackexchange.com/questions/72923/request-flow-of-magento-2)
- Entry point: `/index.php`
1. `Bootstrap::createApplication()`
- `ObjectManagerFactory::create()` creates app & return it to `index.php`
2. `Bootstrap::run()`
- `Application::launch()`
1. finds out which area (admin/frontend) should be loaded
2. load the area's config
3. calls `Magento\Framework\App\FrontControllerInterface::dispatch()` of the area
1. iterate through routes to match request
2. matched route returns an instance of `ActionController`
3. `FrontController` calls `ActionController::dispatch()`
- `ActionController` performs some tasks (e.g. `Action::execute()`) and returns `ResultInterface` to `FrontController`
4. `FrontController` returns `ResultInterface` to `Application::launch()`
4. renders the `ResultInterface`
---
Installing Magento 2.0: [Installation](https://hackmd.io/@rgbkoi/Hyj-HHEyO)