yezzmedia / laravel-user-content
Customer-managed pages, navigation, redirects, and forms for Yezz Media customer projects.
Requires
- php: ^8.3
- filament/filament: ^5.0
- spatie/laravel-honeypot: ^4.7
- spatie/laravel-package-tools: ^1.16
- spatie/laravel-sluggable: ^3.8
- yezzmedia/laravel-foundation: ^0.2
- yezzmedia/laravel-user-projects: ^0.2
Requires (Dev)
- larastan/larastan: ^3.9
- laravel/pint: ^1.27
- livewire/livewire: ^4.0
- orchestra/testbench: ^11.0
- pestphp/pest: ^4.7
- pestphp/pest-plugin-laravel: ^4.1
- spatie/laravel-activitylog: ^5.0
This package is auto-updated.
Last update: 2026-07-17 08:13:32 UTC
README
Customer-managed pages, navigation, redirects, and forms for Yezz Media customer projects.
Modules
- Pages — Page model with slugs (
spatie/laravel-sluggable), publication workflow, automatic navigation viashow_in_navigationflag. - Navigation — Menu link management with page-bound and external URLs, section support (header/footer), and breadcrumb building.
- Redirects — Exact-match redirects with 301/302 support, loop protection, and automatic redirect creation on page slug changes.
- Forms — Form definitions with configurable field types, submission storage, honeypot spam protection, IP-based rate limiting, and mail delivery hooks.
Requirements
- PHP 8.3+
- Laravel 13+
yezzmedia/laravel-foundation^0.2yezzmedia/laravel-user-projects^0.2spatie/laravel-sluggable^3.8spatie/laravel-honeypot^4.7filament/filament^5.0
Installation
composer require yezzmedia/laravel-user-content
The service provider is auto-discovered.
Run the install command to publish and execute migrations:
php artisan website:install
Configuration
Publish the config file:
php artisan vendor:publish --tag=user-content-config
Usage
Pages
Pages are scoped to a project. Create pages through the project admin UI (Hub → Select Project → Pages).
use YezzMedia\Content\Models\Page; $pages = Page::published()->inNavigation()->get();
Navigation
Navigation menus are built from published pages with show_in_navigation = true plus external NavigationLink records.
use YezzMedia\Content\Support\NavigationManager; $menu = app(NavigationManager::class)->buildMenu($project, 'header');
Redirects
Redirects resolve by exact source path match:
use YezzMedia\Content\Support\RedirectManager; $redirect = app(RedirectManager::class)->resolve($project, '/old-page');
Forms
Form definitions with configurable fields. Submissions are stored with spam protection.
GET /{project}/form/{formDefinition} → Livewire SubmitForm component
Events
YezzMedia\Content\Events\PagePublishedYezzMedia\Content\Events\PageUnpublishedYezzMedia\Content\Events\PageSlugChangedYezzMedia\Content\Events\PageCreatedYezzMedia\Content\Events\PageUpdatedYezzMedia\Content\Events\PageDeletedYezzMedia\Content\Events\FormSubmissionReceived
Permissions
content.pages.view,content.pages.create,content.pages.update,content.pages.publishcontent.navigation.managecontent.redirects.managecontent.forms.manage,content.forms.submissions.view,content.forms.submissions.export
Changelog
See CHANGELOG.md.