Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Lara Pro Cms Laravel Package

appdezign/lara-pro-cms

Lara Pro CMS 10 is a flexible content management system built on Laravel by Firmaq Media. Includes a developer guide and documentation at https://docs.laracms.nl/ for setup, customization, and extension.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require appdezign/lara-pro-cms
    php artisan laracms:install
    

    Follow prompts to configure database, admin user, and basic settings.

  2. First Use Case:

    • Create a basic page via Filament admin panel (/admin).
    • Access it via /pages/{slug} to verify rendering.
    • Test the API endpoint (/api/pages) to confirm JSON output.
  3. Key Files to Inspect:

    • config/laracms.php: Core configuration (content types, media settings).
    • app/Providers/LaracmsServiceProvider.php: Service bindings and bootstrapping.
    • resources/views/vendor/laracms/: Default Blade templates (override as needed).
    • database/migrations/laracms_*: Schema for content types, media, and users.
  4. Documentation:

    • Start with the Developer Guide under:
      • "Quick Start" for installation.
      • "Content Types" for customizing models/fields.
      • "Filament Customization" for admin UI tweaks.

Implementation Patterns

Core Workflows

1. Content Modeling

  • Extend Content Types: Use php artisan make:laracms-content-type to create custom types (e.g., Product, Event). Example:
    // app/Laracms/ContentTypes/Product.php
    namespace App\Laracms\ContentTypes;
    
    use Appdezign\Laracms\ContentTypes\ContentType;
    
    class Product extends ContentType
    {
        public static function fields(): array
        {
            return [
                'title' => 'string',
                'price' => 'decimal',
                'images' => 'media', // Uses Spatie Media Library
                'categories' => 'belongsToMany:Category',
            ];
        }
    }
    
  • Field Types: Leverage built-in fields (string, text, media, belongsTo, etc.) or create custom ones by extending Appdezign\Laracms\Fields\Field.

2. Admin Customization (Filament)

  • Override Filament Resources: Publish and modify Filament resources:
    php artisan vendor:publish --tag="laracms-filament-resources"
    
    Edit resources/views/vendor/laracms/filament/ to customize forms/tables.
  • Add Custom Pages: Use Filament’s plugin system:
    // app/Providers/LaracmsServiceProvider.php
    public function boot()
    {
        Filament::registerPlugin(
            new class extends Plugin {
                public static function getNavigationIcon(): string
                {
                    return 'heroicon-o-cog';
                }
                public static function getNavigationGroup(): ?string
                {
                    return 'Settings';
                }
                public static function getNavigationLabel(): string
                {
                    return 'Custom Tool';
                }
            }
        );
    }
    

3. Frontend Integration

  • Blade Templates: Use @laracms directives to render content:
    @laracms('page', 'homepage')
        <h1>{{ $content->title }}</h1>
        {!! $content->body !!}
    @endlaracms
    
  • API Consumption: Fetch content via Laravel API:
    // Example: Fetch a page via React/Vue
    const response = await fetch('/api/pages/homepage');
    const page = await response.json();
    
  • Livewire Components: Embed Livewire for dynamic content:
    <livewire:laracms-content type="blog_post" id="{{ $post->id }}" />
    

4. Media Handling

  • Spatie Media Library Integration: Configure in config/laracms.php:
    'media' => [
        'driver' => 'spatie',
        'disk' => 'public',
    ],
    
    Use the media field type in content types to attach files.

5. Routing

  • Custom Routes: Override routes in routes/laracms.php:
    Route::get('/custom-path', [\Appdezign\Laracms\Http\Controllers\PageController::class, 'show'])
        ->name('laracms.custom-page');
    
  • API Routes: Extend routes/api.php:
    Route::apiResource('custom-content', \App\Laracms\Http\Controllers\CustomContentController::class);
    

6. Localization

  • Multi-Language Support: Use Laravel’s localization with laravel-translatable or Spatie’s package:
    // In a content type field
    'title' => [
        'type' => 'string',
        'translatable' => true,
    ],
    
    Configure locales in config/app.php and config/laracms.php.

Integration Tips

Laravel Ecosystem

  • Authentication: Integrate with Breeze/Jetstream/Sanctum:
    // config/laracms.php
    'auth' => [
        'driver' => 'sanctum',
    ],
    
  • Queues/Jobs: Use Laravel queues for async content processing:
    use Appdezign\Laracms\Jobs\ProcessContent;
    
    ProcessContent::dispatch($content)->onQueue('laracms');
    
  • Events: Listen to CMS events (e.g., ContentPublished):
    // app/Providers/EventServiceProvider.php
    protected $listen = [
        \Appdezign\Laracms\Events\ContentPublished::class => [
            \App\Listeners\SendNotification::class,
        ],
    ];
    

Frontend Frameworks

  • React/Vue: Use Laravel’s API or Inertia.js for SSR:
    // Inertia/Vue example
    const page = await Inertia.get('/pages/homepage');
    
  • Alpine.js: Combine with Livewire for reactivity:
    <div x-data="{ open: false }">
        <button @click="open = true">Edit</button>
        <livewire:edit-content wire:key="content-{{ $id }}" :content="$content" x-show="open" />
    </div>
    

Performance

  • Caching: Cache API responses or Filament views:
    Route::middleware(['cache.headers:public;max_age=2592000'])->group(function () {
        Route::apiResource('pages', \Appdezign\Laracms\Http\Controllers\PageController::class);
    });
    
  • Lazy Loading: Use Laravel’s lazy collections for large datasets:
    $posts = Post::query()->lazy()->paginate(10);
    

Gotchas and Tips

Pitfalls

1. Filament/Livewire Quirks

  • Livewire Hydration: Avoid excessive Livewire components in loops—use pagination or lazy loading.
    • Symptom: Slow page loads or hydration errors.
    • Fix: Use wire:ignore or wire:key to optimize.
  • Filament Plugin Conflicts: Custom Filament plugins may override core functionality.
    • Symptom: Admin panel breaks after plugin installation.
    • Fix: Check app/Providers/LaracmsServiceProvider.php for plugin registration order.

2. Database Schema

  • Migration Conflicts: Manual migrations may clash with Laracms’ schema.
    • Symptom: Schema::hasTable() fails or duplicate columns.
    • Fix: Run php artisan laracms:migrate --force or inspect database/migrations/laracms_* before custom migrations.
  • Soft Deletes: Laracms uses SoftDeletes by default. Disable in models if needed:
    use Illuminate\Database\Eloquent\SoftDeletes;
    
    class Post extends Model
    {
        use SoftDeletes; // Remove if not needed
    }
    

3. Routing Collisions

  • Default Routes: Laracms registers routes under /admin, /api, and /pages. Override carefully:
    // routes/web.php
    Route::prefix('custom-admin')->group(function () {
        \Appdezign\Laracms\Http\Controllers\AdminController::class;
    });
    
  • Symptom: 404 errors or infinite redirects.
  • Fix: Use Route::namespace() or Route::prefix() to isolate routes.

4. Media Handling

  • Storage Drivers: Ensure config/filesystems.php matches config/laracms.php media settings.
    • Symptom: Uploads fail silently.
    • Fix: Verify disk availability:
      php artisan storage:link
      
  • Large Files: Increase post_max_size and upload_max_filesize in php.ini if
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
calmfox/watch-sylius
damienfern/grpc-symfony-bundle
atoolo/index-bundle
atoolo/genai-bundle
coprotoai/laravel-ticket
davidjln/llm-carbon-bundle
cryonighter/valid-request-bundle
coolms/taxonomy-bundle
coolms/field-bundle
articulate-orm/symfony
aaix/laravel-tall-architect
ephoto/akeneo-connector
emmanuelballery/eb-plantumlbundle
emielburgman/symfony-visitor-beacon
emielburgman/symfony-visit-storage
emielburgman/symfony-security-headers
emielburgman/symfony-log-viewer
emarref/xdebug-bundle
emarref/pubnub-bundle
elriseio/finance-money-bundle