Sites & Page CMS
Overview
- Scope
- Feature-gated public CMS, site resolution, layouts, profiles, pages, blocks, and slots
Key concepts
- Site Profile
- Runtime profile assembled from a PHP SiteLayoutDriver and an optional JSON overlay.
- Layout Driver
- A registered implementation defining a site key, default profile data, menu declarations, and appearance settings.
- Slot
- A named region resolved by a registered handler such as CMS page, route, Blade, redirect, or view.
Structure
- Site Domain
- Modelapp/Models/Site/Site.php
- Storagesites tables from database/migrations/2026_06_22_130000_create_sites_tables.php
- Rendering
- Page Models
- Page
- PageTranslation
- PageSection
- Block Engineapp/Page and app/Services/Cms/Engine
- Layout Engineapp/Services/Cms/Site/Layout
- Profile Engineapp/Services/Cms/Site/Profile
- Page Models
- Public Routesroutes/cms.php
Facts
- SiteServiceProvider binds SiteResolverInterface to DefaultSiteResolver. authoritative
- SiteProfileManager and JsonSiteProfileLoader provide profile data; SiteLayoutBootstrap registers layout contributors. authoritative
- The registered slot handlers are CMS page, route, Blade, redirect, and view handlers. authoritative
- CMS public routes conditionally provide mail-open tracking, locale switching, home, contact form submission, sitemap, and a page fallback. authoritative
- The PageController fallback is registered only when public_routes and page_cms features are enabled. authoritative
- The ordinary web home route is used only when the CMS is not configured to own the home route. authoritative
- CmsEngineServiceProvider registers block rendering, block data mapping, editor repository, Editor.js rendering, placeholder resolution, and draft-preview authorization. authoritative
How-to guides
Add Layout Capability
- implement a SiteLayoutDriver or contributor
- register the contributor through the existing layout bootstrap path
- declare profile defaults, menus, appearance settings, and required views
- verify the resolved profile and target public feature flags
Rules
Architectural rule
Treat the PHP layout as the declaration/default layer and JSON as an optional override layer.
Architectural rule
Declare layout-provided menus and appearance settings through the SiteLayoutDriver contract instead of relying on undocumented JSON keys.