Search code examples
phpsymfonyadmin-generator

Overwrite controller from vendors


i`m have bundle in my project vendors. Necessary overwrite EditController class. My vendor bundle build with help CedricLambardot AdminGeneratorBundle. I overwrite *-generator.yml and pointed params.bundle_name name my vendor bundle. Owerrite controller too, but him dont work, all the same symfony using controller from vendor.

EditController.php from vendor:

namespace Acme\ProductBundle\Controller\Product;

use Admingenerated\AcmeProductBundle\BaseProductController\EditController as BaseEditController;
// ...

class EditController extends BaseEditController
{
    // ...
}

Overwrited EditController.php

namespace Acme\AnniProductBundle\Controller\Product;

use Acme\ProductBundle\Controller\Product\EditController as BaseEditController;
// ...

class EditController extends BaseEditController
{
    // ...
}

My overwrited *-generator.yml:

generator: admingenerator.generator.doctrine_odm
params:
  model: Acme\AnniProductBundle\Document\Product
  namespace_prefix: Acme
  bundle_name: ProductBundle
  object_actions:
        delete: ~
  fields:
    name:
      label: Name
    # ...
  # ...

My routes:

Acme_ProductBundle_Product_list:
    path:      /product/
    defaults:  { _controller: AcmeAnniProductBundle:Product\List:index }

Acme_ProductBundle_Product_filters:
    path:      /product/filter
    defaults:  { _controller: AcmeAnniProductBundle:Product\List:filter }

Acme_ProductBundle_Product_edit:
    path:      /product/{pk}/edit
    defaults:  { _controller: AcmeAnniProductBundle:Product\Edit:index }

Acme_ProductBundle_Product_update:
    path:      /product/{pk}/update
    defaults:  { _controller: AcmeAnniProductBundle:Product\Edit:update }

Acme_ProductBundle_Product_object:
    path:      /product/{pk}/{action}
    defaults:  { _controller: AcmeAnniProductBundle:Product\Actions:object }

Acme_ProductBundle_Product_new:
    path:      /product/new
    defaults:  { _controller: AcmeAnniProductBundle:Product\New:index }

Acme_ProductBundle_Product_create:
    path:      /product/create
    defaults:  { _controller: AcmeAnniProductBundle:Product\New:create }

What am I doing wrong?


Solution

  • Problem with annotation:

    Parent controller:

    namespace Acme\ProductBundle\Controller\Product;
    
    use Admingenerated\AcmeProductBundle\BaseProductController\EditController as     BaseEditController;
    use JMS\DiExtraBundle\Annotation as DI;
    // ...
    
    class EditController extends BaseEditController
    {
        /** @DI\Inject("doctrine_mongodb.odm.document_manager") */
        private $dm;
    
        // ...
    }
    

    If in overwriten controller write:

    /** @DI\Inject("doctrine_mongodb.odm.document_manager") */
    private $dm;
    

    All works