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

Cms Bundle Laravel Package

dywee/cms-bundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation Run:

    composer require dywee/cms-bundle
    

    (Note: The README mentions dywee/core-bundle, but the package name is dywee/cms-bundle—verify compatibility.)

  2. Register the Bundle Add to config/bundles.php:

    return [
        // ...
        Dywee\CmsBundle\DyweeCmsBundle::class => ['all' => true],
    ];
    
  3. Enable Serializer Ensure config/packages/framework.yaml includes:

    framework:
        serializer:
            enabled: true
    
  4. First Use Case: Basic CMS Page Create a controller to fetch a CMS page (assuming default routes):

    use Dywee\CmsBundle\Entity\Page;
    use Dywee\CmsBundle\Repository\PageRepository;
    
    class PageController extends AbstractController
    {
        public function show(PageRepository $pageRepo, string $slug)
        {
            $page = $pageRepo->findOneBy(['slug' => $slug]);
            return $this->render('cms/page.html.twig', ['page' => $page]);
        }
    }
    

    (Check src/Dywee/CmsBundle/Resources/config/routing.yml for default routes.)


Implementation Patterns

Core Workflows

  1. Content Management

    • Pages: Use Page entity (likely in Dywee\CmsBundle\Entity\Page) for structured content.
      $page = new Page();
      $page->setTitle('About Us');
      $page->setSlug('about');
      $page->setContent('<h1>Welcome</h1>');
      $entityManager->persist($page);
      
    • Blocks: If the bundle supports reusable blocks, extend Block entity or use a custom service.
  2. Routing

    • Override default routes by extending the bundle’s routing file:
      # config/routes/cms.yaml
      dywee_cms:
          resource: "@DyweeCmsBundle/Resources/config/routing.yml"
          prefix: /custom-prefix
      
  3. Templating

    • Use Twig extensions (if provided) for CMS-specific helpers:
      {{ dywee_cms_content(page.content) }} {# Renders raw content safely #}
      
    • Extend base templates in templates/base_cms.html.twig.
  4. API Integration

    • Serialize Page entities with @Serializer:
      use Symfony\Component\Serializer\SerializerInterface;
      
      public function getPages(SerializerInterface $serializer)
      {
          $pages = $pageRepo->findAll();
          return $serializer->serialize($pages, 'json', ['groups' => ['cms']]);
      }
      

Integration Tips

  • Doctrine Events: Listen for prePersist/preUpdate to auto-generate slugs:
    $page->setSlug(StringUtil::slugify($page->getTitle()));
    
  • Form Types: Extend PageType (if available) to add custom fields:
    class CustomPageType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('customField', TextType::class);
        }
    }
    
  • Asset Management: Use Symfony’s asset system for CMS images:
    <img src="{{ asset(page.imagePath) }}" />
    

Gotchas and Tips

Pitfalls

  1. Bundle Compatibility

    • The package is Symfony 2.x (not Laravel). Porting requires:
      • Replace AbstractController with Laravel’s Controller.
      • Adapt Doctrine event listeners to Laravel’s event system.
      • Rewrite Twig templates to Blade (e.g., {{ }}@{{ }}).
    • Tip: Use a wrapper class to abstract Symfony dependencies:
      class CmsService
      {
          public function __construct(private EntityManagerInterface $em) {}
      
          public function findPage(string $slug) {
              return $this->em->getRepository(Page::class)->findOneBy(['slug' => $slug]);
          }
      }
      
  2. Serializer Quirks

    • Ensure entities use #[Groups("cms")] for serialization:
      #[ORM\Entity]
      #[ApiResource(groups: ['cms'])]
      class Page {}
      
    • Debugging: Check config/packages/serializer.yaml for custom encoders/normalizers.
  3. Routing Conflicts

    • Default routes may clash with Laravel’s. Override in routes/web.php:
      Route::get('/cms/{slug}', [CmsController::class, 'show'])->name('cms.page');
      
  4. Missing Documentation

    • The bundle lacks Laravel-specific guides. Reverse-engineer:
      • Inspect Dywee\CmsBundle\Entity\Page for fields.
      • Check src/Resources/config/doctrine/ for mappings.

Debugging Tips

  • Entity Not Found? Verify the Page entity is mapped in config/doctrine.php:
    'mappings' => [
        'DyweeCmsBundle' => [
            'type' => 'xml',
            'dir' => __DIR__.'/../vendor/dywee/cms-bundle/src/Resources/config/doctrine',
            'prefix' => 'Dywee\CmsBundle\Entity',
            'alias' => 'DyweeCmsBundle',
        ],
    ],
    
  • Twig Errors Clear cache after extending templates:
    php artisan view:clear
    php artisan cache:clear
    

Extension Points

  1. Custom Entities Extend Page or create new entities (e.g., BlogPost) by copying the bundle’s structure:

    namespace App\Entity;
    
    use Dywee\CmsBundle\Entity\AbstractCmsEntity;
    
    class BlogPost extends AbstractCmsEntity
    {
        // Add custom fields
    }
    
  2. Services Override bundle services in config/services.yaml:

    services:
        Dywee\CmsBundle\Service\PageService:
            arguments:
                $customParam: 'value'
    
  3. Events Listen for dywee.cms.page.save (if dispatched) or create custom events:

    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
    
    class CmsEventSubscriber implements EventSubscriberInterface
    {
        public static function getSubscribedEvents()
        {
            return [
                'dywee.cms.page.pre_save' => 'onPreSave',
            ];
        }
    }
    
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.
anousss007/vigilance
supportpal/eloquent-model
ardenexal/fhir-models
laravel-at/laravel-image-sanitize
romalytar/yammi-audit-log-laravel
ardenexal/fhir-validation
arshaviras/weather-widget
laravel-chronicle/core
sunchayn/nimbus
daikazu/eloquent-salesforce-objects
unseen-codes/chat
romalytar/yammi-jobs-monitoring-laravel
kisame76/filament-db-table-state
nqxcode/laravel-lucene-search
dpfx/laravel-livewire-wizards
workos/workos-php-laravel
sofa/laravel-global-scope
nawasara/auth-primitives
adhocrat-io/arkhe-main
make-dev/orca-harpoon