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

arzzzen/cms-bundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Install Dependencies Run:

    composer require arzzzen/cms-bundle sonata-project/doctrine-orm-admin-bundle friendsofsymfony/user-bundle sonata-project/media-bundle sonata-project/easy-extends-bundle
    

    Ensure dev-master is replaced with a stable version if available.

  2. Register the Bundle Add to app/AppKernel.php:

    new Arzzzen\CmsBundle\ArzzzenCmsBundle(),
    new Sonata\BlockBundle\SonataBlockBundle(),
    new Sonata\jQueryBundle\SonatajQueryBundle(),
    
  3. Configure Routing Add to app/config/routing.yml:

    arzzzen_cms:
        resource: "@ArzzzenCmsBundle/Resources/config/routing.yml"
        prefix: /
    
  4. Basic Configuration Update app/config/config.yml:

    arzzzen_cms:
        layout: "AcmeDemoBundle:layout:layout.html.twig"
    
  5. First Use Case Create a page entity (e.g., src/Acme/DemoBundle/Entity/Page.php) and register it with SonataAdmin. Example:

    // src/Acme/DemoBundle/Admin/PageAdmin.php
    use Sonata\AdminBundle\Admin\Admin;
    use Sonata\AdminBundle\Datagrid\DatagridMapper;
    use Sonata\AdminBundle\Form\FormMapper;
    
    class PageAdmin extends Admin
    {
        protected function configureFormFields(FormMapper $formMapper)
        {
            $formMapper
                ->add('title', 'text')
                ->add('content', 'sonata_media_type', [
                    'provider_list' => 'sonata.media.provider.image'
                ]);
        }
    }
    

Implementation Patterns

Core Workflows

  1. Page Management

    • Use SonataAdmin to CRUD pages. Extend Arzzzen\CmsBundle\Entity\Page or create custom entities.
    • Example:
      // src/Acme/DemoBundle/Resources/config/admin.yml
      sonata_admin:
          options:
              group:      'Content'
              label:      'Pages'
              label_catalog: 'AcmeDemoBundle'
          show_in_dashboard: true
          templates:
              list:       ArzzzenCmsBundle:Default:admin_list.html.twig
              edit:       ArzzzenCmsBundle:Default:admin_edit.html.twig
      
  2. Layout Customization Override the default layout (ArzzzenCmsBundle:Default:sonata_admin_base_layout.html.twig) by extending it in your bundle:

    {# src/Acme/DemoBundle/Resources/views/layout.html.twig #}
    {% extends 'ArzzzenCmsBundle:Default:sonata_admin_base_layout.html.twig' %}
    {% block sonata_body %}
        {{ parent() }}
        <div class="custom-footer">Your custom content</div>
    {% endblock %}
    
  3. Media Integration Use SonataMediaBundle for assets. Configure contexts (e.g., news, publication) in config.yml and attach media to pages:

    $page->setMedia($media); // In a controller or admin service
    
  4. Block-Based UI Leverage SonataBlockBundle to add reusable components (e.g., sliders, sidebars):

    # config.yml
    sonata_block:
        blocks:
            sonata.block.service.text:
                contexts: [cms]
    
  5. Routing for Pages Dynamically route pages via a custom controller:

    // src/Acme/DemoBundle/Controller/PageController.php
    class PageController extends Controller
    {
        public function showAction($slug)
        {
            $page = $this->getDoctrine()->getRepository('AcmeDemoBundle:Page')->findOneBy(['slug' => $slug]);
            return $this->render('AcmeDemoBundle:Page:show.html.twig', ['page' => $page]);
        }
    }
    

Integration Tips

  • Extend Entities: Create custom entities extending Arzzzen\CmsBundle\Entity\Page for domain-specific fields.
  • Event Listeners: Hook into sonata.admin.post_persist or sonata.admin.post_update to automate workflows (e.g., slug generation).
  • Twig Extensions: Add custom Twig functions for CMS-specific logic (e.g., {{ page_menu() }}).
  • Asset Management: Use sonata.media providers to handle images, videos, and files uniformly.

Gotchas and Tips

Pitfalls

  1. Dependency Conflicts

    • The bundle requires SonataAdminBundle and FOSUserBundle in dev-master. Pin versions to avoid breaking changes:
      sonata-project/admin-bundle: 2.3.*
      friendsofsymfony/user-bundle: 2.0.*
      
    • Fix: Use composer require vendor/package:version explicitly.
  2. Layout Overrides

    • Overriding sonata_admin_base_layout.html.twig may break if the bundle updates its template structure.
    • Fix: Use {% block sonata_body %} sparingly and document overrides.
  3. Media Contexts

    • Forgetting to configure a media context (e.g., news) in sonata_media will cause errors when uploading assets.
    • Fix: Validate contexts match your entity fields:
      sonata_media:
          contexts:
              news:
                  providers: [sonata.media.provider.image] # Must match entity field type
      
  4. Routing Conflicts

    • The bundle’s default routes may clash with existing ones (e.g., /admin).
    • Fix: Prefix routes in routing.yml:
      arzzzen_cms:
          resource: "@ArzzzenCmsBundle/Resources/config/routing.yml"
          prefix: /cms
      
  5. Entity Inheritance

    • Extending Arzzzen\CmsBundle\Entity\Page requires proper mapping in config.yml:
      doctrine:
          orm:
              mappings:
                  acmedemobundle:
                      type: annotation
                      dir: "%kernel.root_dir%/../src/Acme/DemoBundle/Entity"
                      prefix: "Acme\DemoBundle\Entity"
                      alias: AcmeDemoBundle
      

Debugging Tips

  • Symfony Profiler: Enable web_profiler to inspect SonataAdmin queries and media uploads.
  • Log Media Events: Add debug logs for media provider issues:
    // config.yml
    sonata_media:
        providers:
            image:
                service: sonata.media.provider.image
                # Add debug logging
                logger: true
    
  • Clear Cache: After config changes, run:
    php bin/console cache:clear --env=prod
    

Extension Points

  1. Custom Admin Classes Extend Arzzzen\CmsBundle\Admin\PageAdmin to add fields or logic:

    class CustomPageAdmin extends Arzzzen\CmsBundle\Admin\PageAdmin
    {
        protected function configureFormFields(FormMapper $formMapper)
        {
            parent::configureFormFields($formMapper);
            $formMapper->add('customField', 'text');
        }
    }
    
  2. Twig Globals Add CMS-specific data to Twig:

    // src/Acme/DemoBundle/Twig/CmsExtension.php
    class CmsExtension extends \Twig_Extension
    {
        public function getFunctions()
        {
            return [
                new \Twig_SimpleFunction('get_page_menu', [$this, 'getPageMenu']),
            ];
        }
    }
    

    Register in services.yml:

    services:
        acme_demo.twig.cms_extension:
            class: Acme\DemoBundle\Twig\CmsExtension
            tags:
                - { name: twig.extension }
    
  3. Event Subscribers Listen to sonata.admin.post_persist to auto-generate slugs:

    // src/Acme/DemoBundle/EventListener/PageSlugListener.php
    class PageSlugListener
    {
        public function onPostPersist(GetResponseEvent $event)
        {
            $page = $event->getSubject();
            if ($page instanceof Page) {
                $page->setSlug(StringUtil::slugify($page->getTitle()));
                $this->em->persist($page);
                $this->em->flush();
            }
        }
    }
    

    Register in services.yml:

    services:
        acme_demo.listener.page_slug:
            class: Acme\DemoBundle\EventListener\PageSlugListener
            arguments: ["@doctrine.orm.entity_manager"]
            tags:
                - { name: kernel.event_subscriber }
    
  4. Custom Block Types Create reusable blocks (e.g., a "Latest News" block):

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.
comsave/common
alecsammon/php-raml-parser
chrome-php/wrench
lendable/composer-license-checker
typhoon/reflection
mesilov/moneyphp-percentage
mike42/gfx-php
bookdown/themes
aura/view
aura/html
aura/cli
povils/phpmnd
nayjest/manipulator
omnipay/tests
psr-mock/http-message-implementation
psr-mock/http-factory-implementation
psr-mock/http-client-implementation
voku/email-check
voku/urlify
rtheunissen/guzzle-log-middleware