Installation Add the package via Composer:
composer require astrath/page-builder-bundle
Register the bundle in config/app.php under providers:
Astrath\PageBuilderBundle\PageBuilderBundle::class,
Publish Assets Run the following to publish migrations, config, and assets:
php artisan vendor:publish --provider="Astrath\PageBuilderBundle\PageBuilderBundle" --tag="config"
php artisan vendor:publish --provider="Astrath\PageBuilderBundle\PageBuilderBundle" --tag="migrations"
php artisan migrate
Basic Usage
PageBuilderModel or use the provided trait:
use Astrath\PageBuilderBundle\Model\PageBuilderModel;
class MyPage extends PageBuilderModel
{
protected $table = 'my_pages';
}
PageBuilderController or scaffold your own:
use Astrath\PageBuilderBundle\Http\Controllers\PageBuilderController;
class MyPageController extends PageBuilderController
{
protected $model = MyPage::class;
}
Frontend Integration
@vite(['resources/js/page-builder.js', 'resources/css/page-builder.css'])
@pageBuilder
@block('header')
<!-- Header content -->
@endblock
@endpageBuilder
Block Registration Define reusable blocks via a service provider:
public function boot()
{
$this->app->make('page_builder')->addBlock('custom_block', [
'title' => 'Custom Block',
'content' => '<div class="custom-block">...</div>',
'fields' => [
'title' => 'text',
'color' => 'color',
],
]);
}
Dynamic Page Rendering Fetch and render pages dynamically:
$page = MyPage::find(1);
echo $page->render(); // Renders the page with all blocks
Admin Panel Integration
/admin/pages).PageBuilderAdminController.Frontend Editing Enable live editing with the Gutenberg-like interface:
// Initialize the editor (check bundle docs for exact JS API)
PageBuilder.init({
endpoint: '/api/page-builder',
container: '#page-builder-container',
});
PageBuilderApiController for RESTful interactions with pages/blocks.Cache::remember):
return Cache::remember("page_{$page->id}", now()->addHours(1), function () use ($page) {
return $page->render();
});
Block Serialization
json_encode()/json_decode() for complex fields.Asset Paths
/css/page-builder.css) may break in production. Use Laravel’s asset() helper or Vite’s @asset directive.Migration Conflicts
$table->string('slug')->unique(); // Example customization
Frontend Dependencies
@wordpress/block-editor). Ensure these are included or mock them if needed.\Log::debug('Block data:', ['data' => $block->data]);
php artisan route:list | grep page-builder
php artisan view:clear
Custom Block Types
Extend the Block model or create a custom block service:
class CustomBlockService extends \Astrath\PageBuilderBundle\Services\BlockService
{
public function render($block)
{
// Custom logic
}
}
Override Templates Publish and override Blade templates:
php artisan vendor:publish --tag="page-builder-views"
Then modify resources/views/vendor/page-builder/....
Hooks/Events Listen for page/block events (if the bundle supports them):
\Event::listen('page.builder.render', function ($page) {
// Modify rendering logic
});
API Customization
Extend the PageBuilderApiController to add endpoints or modify responses:
class CustomPageBuilderApiController extends PageBuilderApiController
{
public function customEndpoint()
{
return response()->json(['custom' => 'data']);
}
}
How can I help you explore Laravel packages today?