Installation
Run composer require tsrgtm/pageman in your Laravel project.
Publish the config with php artisan vendor:publish --provider="Tsrgtm\Pageman\PagemanServiceProvider".
Execute php artisan pageman:install and follow the CLI prompts (e.g., admin user credentials, database setup).
First Access
Visit /pageman/admin in your browser. Log in with the credentials set during installation.
First Use Case: Create a Page
about-us), title (e.g., "About Us"), and content (HTML or markdown)./[slug] (e.g., /about-us).Where to Look First
/pageman/admin for UI-based management.config/pageman.php for customizing routes, middleware, or roles.database/migrations/ for schema changes (e.g., pageman_pages_table).app/Providers/PagemanServiceProvider.php (if extending).pageman_pages table.
Example: Create a dynamic "Contact" page with a form.use Tsrgtm\Pageman\Facades\Pageman;
$page = Pageman::getPage('about-us'); // Returns Page model or null
Fetch all published pages:
$pages = Pageman::getPublishedPages();
editor, admin).
Assign roles to users via the Users > Edit interface.if (Gate::allows('edit-pageman-pages')) {
// Allow page editing
}
Or use middleware:
Route::middleware(['auth', 'can:edit-pageman-pages'])->group(function () {
// Protected routes
});
php artisan vendor:publish --tag=pageman-views
Customize files in resources/views/vendor/pageman/.page.blade.php template (located in resources/views/vendor/pageman/page.blade.php) to wrap page content:
<div class="container">
@yield('content')
{{ $page->content }}
</div>
PageCreated, PageUpdated) in EventServiceProvider:
protected $listen = [
'Tsrgtm\Pageman\Events\PageCreated' => [
'App\Listeners\LogPageCreation',
],
];
$this->app->bind('Tsrgtm\Pageman\Repositories\PageRepository', function () {
return new App\Repositories\CustomPageRepository();
});
Route::get('/api/pages/{slug}', function ($slug) {
return new PageResource(Pageman::getPage($slug));
});
Register the PageResource in app/Http/Resources.Database Conflicts:
pageman:install after migrations exist may cause errors.pageman_* tables or manually merge schema changes.Route Collisions:
/pageman/admin) may conflict with existing routes.config/pageman.php:
'admin' => [
'prefix' => 'cms',
'middleware' => ['web', 'auth'],
],
Tailwind CSS Dependencies:
npm install tailwindcss) and configured in resources/css/app.css.Permission Denied:
admin role to at least one user during installation.Caching Quirks:
php artisan cache:clear
php artisan view:clear
Log Page Queries:
Enable query logging in .env:
DB_LOG_QUERIES=true
Check storage/logs/laravel.log for SQL errors.
Admin Panel Debugging:
barryvdh/laravel-debugbar) to inspect:
config/pageman.php for testing:
'middleware' => ['web'], // Remove 'auth' or 'can:...'
Template Overrides:
@debug directives in custom templates to inspect variables:
@debug($page)
Custom Fields:
Page model to add fields (e.g., meta_title, featured_image):
php artisan make:migration add_custom_fields_to_pageman_pages_table --table=pageman_pages
Update the model:
namespace App\Models;
use Tsrgtm\Pageman\Models\Page as BasePage;
class Page extends BasePage {
protected $casts = [
'featured_image' => 'string',
];
}
Custom Templates:
page.blade.php to add dynamic layouts:
<!-- resources/views/vendor/pageman/page.blade.php -->
<article class="prose">
<h1>{{ $page->title }}</h1>
{!! $page->content !!}
@if($page->featured_image)
<img src="{{ asset('storage/' . $page->featured_image) }}" alt="{{ $page->title }}">
@endif
</article>
Custom Roles/Permissions:
Role model or use Laravel’s policy system:
php artisan make:policy PagePolicy --model=Tsrgtm\Pageman\Models\Page
Define permissions in app/Policies/PagePolicy.php:
public function edit(User $user) {
return $user->hasRole('editor');
}
API Extensions:
Route::prefix('api')->group(function () {
Route::get('/pages/search', [PageController::class, 'search']);
});
Implement search logic in app/Http/Controllers/PageController.Event Listeners:
// app/Listeners/SendPageUpdateNotification.php
public function handle(PageUpdated $event) {
Notification::route('mail', $event->page->user->email)
->notify(new PageUpdatedNotification($event->page));
}
How can I help you explore Laravel packages today?