Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No entity manager defined for class

I am trying to just display a list. My Supplier and Property list were displaying until I implemented the product list :(

Now I get this error with the Supplier and Property lists but not for the newly added product list:

enter image description here

Here is my app/config.yml:

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: services.yml }

parameters:
    sylius.locale: "%locale%"

framework:
    #esi:             ~
    translator:      { fallbacks: ["%locale%"] }
    secret:          "%secret%"
    router:
        resource: "%kernel.root_dir%/config/routing.yml"
        strict_requirements: ~
    form:            ~
    csrf_protection: ~
    validation:      { enable_annotations: true }
    templating:
        engines: ['twig']
        #assets_version: SomeVersionScheme
    default_locale:  "%locale%"
    trusted_hosts:   ~
    trusted_proxies: ~
    session:
        storage_id: session.storage.php_bridge
        # handler_id set to null will use default session handler from php.ini
        handler_id:  ~
    fragments:       ~
    http_method_override: true

# Twig Configuration
twig:
    debug:            "%kernel.debug%"
    strict_variables: "%kernel.debug%"
    form:
        resources:
            - 'SonataCoreBundle:Form:datepicker.html.twig'

# Assetic Configuration
assetic:
    debug:          "%kernel.debug%"
    use_controller: false
    #java: /usr/bin/java
    node: /usr/bin/node
    node_paths: [ /usr/lib/node_modules, %kernel.root_dir%/../node_modules ]
    filters:
        autoprefixer:
            bin: %kernel.root_dir%/../node_modules/autoprefixer/autoprefixer
        cssrewrite: ~
        less:
            apply_to: "\.less$"
            bin: %kernel.root_dir%/../node_modules/less
        uglifycss:
            bin: %kernel.root_dir%/../node_modules/uglifycss
        uglifyjs:
            bin: %kernel.root_dir%/../node_modules/uglifyjs
        #closure:
        #    jar: "%kernel.root_dir%/Resources/java/compiler.jar"
        #yui_css:
        #    jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
# Doctrine Configuration
doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        mapping_types:
            enum: string

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        entity_managers:
            default:
                connection: default
                auto_mapping: true
                dql:
                    string_functions:
                        HS_CONCAT_ADDRESS: AppBundle\DQL\HSConcatAddress

# Swiftmailer Configuration
swiftmailer:
    transport: "%mailer_transport%"
    host:      "%mailer_host%"
    username:  "%mailer_user%"
    password:  "%mailer_password%"
    spool:     { type: memory }

# FOS UserBundle Configuration
fos_user:
    registration:
       form:
          type: hs_user_registration
    db_driver: orm
    firewall_name: main
    user_class: AppBundle\Entity\User
    service:
        user_manager: app.security.user_manager

# Doctrine migration bundle Configuration
doctrine_migrations:
    dir_name: %kernel.root_dir%/DoctrineMigrations
    namespace: Application\Migrations
    table_name: migration_versions
    name: Application Migrations

# Sonata Admin Configuration
sonata_admin:
    options:
            use_select2:    false # disable select2
    title:                App
    title_logo:           bundles/sonataadmin/logo_title.png
    # Override default template
    templates:
        show:             AppBundle:Admin/Backend:show.html.twig
        edit:             AppBundle:Admin/Backend:edit.html.twig
        layout:           AppBundle:Common/Admin:standard_layout.html.twig
    security:
            # handler: sonata.admin.security.handler.role

#sonata_intl:
#    timezone:
#        locales:
#            en_GB: Europe/London
#        default: Europe/London

# Sonata Block Configuration
sonata_block:
    default_contexts: [cms]
    blocks:
        sonata.user.block.menu:    # used to display the menu in profile pages
        sonata.user.block.account: # used to display menu option (login option)
        sonata.admin.block.admin_list:
            contexts:   [admin]
        sonata.admin.block.search_result:
                contexts: [admin]

knp_menu:
    # use "twig: false" to disable the Twig extension and the TwigRenderer
    twig:
        template: knp_menu.html.twig
    #  if true, enables the helper for PHP templates
    templating: false
    # the renderer to use, list is also available by default
    default_renderer: twig

# STOF Doctrine Extensions Configuration
stof_doctrine_extensions:
    default_locale: %locale%
    orm:
        default:
            translatable: true
            sluggable: true
            timestampable: true

a2lix_translation_form:
    locale_provider: default        # [1]
    locales: ["%locale%"]           # [1-a]
    default_locale: "%locale%"      # [1-b]
    manager_registry: doctrine      # [2]

# Sylius Archetype
sylius_archetype:
    classes:
        product:
            subject: Sylius\Component\Product\Model\Product
            attribute: Sylius\Component\Product\Model\Attribute
            option: Sylius\Component\Product\Model\Option
            archetype:
                model: Sylius\Component\Product\Model\Archetype
                repository: Sylius\Bundle\ResourceBundle\Doctrine\ORM\TranslatableEntityRepository
                translatable:
                    targetEntity: Sylius\Component\Product\Model\ArchetypeTranslation
            archetype_translation:
                model: Sylius\Component\Product\Model\ArchetypeTranslation

sylius_product:
    driver: doctrine/orm
    classes:
        product:
            model: AppBundle\Entity\Product
            controller: AppBundle\Controller\Backend\ProductController
            form:
                default: AppBundle\Form\Type\ProductType
            translatable:
                targetEntity: AppBundle\Entity\ProductTranslation
        product_translation:
            model: AppBundle\Entity\ProductTranslation
            form:
                default: AppBundle\Form\Type\ProductTranslationType

#sylius_resource:
#    resources:
#         app.backend:
#             driver: doctrine/orm
#             object_manager: default
#             classes:
#                 controller: AppBundle\Controller\Backend\ResourceController
#                 model: AppBundle\Entity\Product

# Sylius Attribute
sylius_attribute:
    driver: doctrine/orm

# Sylius Locale
sylius_locale:
    driver: doctrine/orm

# Sylius Translation
sylius_translation:
    default_mapping:
        translatable:
            field: translations
            currentLocale: currentLocale
            fallbackLocale: fallbackLocale
        translation:
            field: translatable
            locale: locale

# Sylius Variation
sylius_variation:
    driver: doctrine/orm
    classes:
        product:
            variant:
                model: AppBundle\Entity\ProductVariant
                form: AppBundle\Form\Type\ProductVariantType

My admin class:

namespace AppBundle\Admin;

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Form\FormMapper;
use Symfony\Component\EventDispatcher\Event;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\AdminBundle\Admin\AdminInterface;
use Sonata\AdminBundle\Route\RouteCollection;
use Sonata\AdminBundle\Form\Type;
use Sonata\AdminBundle\Validator\ErrorElement;
use AppBundle\Entity\Suppliers as Suppliers;
use AppBundle\Form\Type\CreateSupplierForm;
use Symfony\Component\DependencyInjection\ContainerInterface;

class SupplierAdmin extends Admin
{

    /**
     * {@inheritdoc}
     */
    protected $baseRouteName = 'Admin\SupplierAdmin';

    /**
     * {@inheritdoc}
     */
    protected $baseRoutePattern = 'supplier';

    /**
     * @var ContainerInterface
     */
    private $container;


    public function setContainer (ContainerInterface $container)
    {
        $this->container = $container;
    }

    /**
     * @param \Sonata\AdminBundle\Show\ShowMapper $showMapper
     *
     * @return void
     */
    protected function configureShowFields(ShowMapper $showMapper)
    {
        $showMapper
            ->with('Supplier Details')
            ->add('id')
            ->add('name')
            ->add('created')
            ->end();
        if ($this->getSubject()->getType() == 'LPE') {
            $showMapper->with('Property Expert')
                ->add('LpeFirstName', null, array('label' => 'First Name'))
                ->add('LpeLastName', null, array('label' => 'Last Name'))
                ->add('LpeEmail', null, array('label' => 'Email'))
                ->add('ContractType', null, array('label' => 'Type'))
                ->add('regions', 'entity', array(
                    'class' => 'AppBundle:Regions',
                    "multiple" => true,
                    'label' => 'Regions Covered'
                ))
                ->end();
        }
    }

    /**
     * @param \Sonata\AdminBundle\Datagrid\ListMapper $listMapper
     *
     * @return void
     */
    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->add('id')
            ->add('Type')
            ->addIdentifier('name')
            ->add('created', 'date', array(
                'pattern' => 'dd/MM/Y @ H:m',
                'locale' => 'en_GB',
                'timezone' => 'Europe/London',
            ))
            // add custom action links
            ->add('_action', 'actions', array(
                'actions' => array(
                    'show' => array(),
                    'delete' => array()
                )
            ));
    }

    /**
     * @param \Sonata\AdminBundle\Datagrid\DatagridMapper $datagridMapper
     *
     * @return void
     */
    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
    {
        $datagridMapper
            ->add('type', null, array(),
                'choice',
                array('choices' => Suppliers::getTypes()))
            ->add('name');
    }


    protected function configureRoutes(RouteCollection $collection)
    {
        parent::configureRoutes($collection);
        $collection->add('create', 'create', array(
                '_controller' => 'AppBundle:Backend/SupplierAdmin:createSupplier'
            )
        );
        $collection->add('show', $this->getRouterIdParameter() . '/show', array(
                '_controller' => 'AppBundle:Backend/SupplierAdmin:show',
            )
        );
        $collection->add('delete', $this->getRouterIdParameter() . '/delete', array(
                '_controller' => 'AppBundle:Backend/SupplierAdmin:delete',
            )
        );
    }

    /**
     * @return array
     */
    public function getBatchActions()
    {
        // Disable all batch actions for now
        $actions = array();

        return $actions;
    }

    /**
     * {@inheritdoc}
     */
    public function createQuery($context = 'list')
    {
        $query = parent::createQuery($context);
        // Default Alias is "o"
        $query->orderBy('o.id', 'DESC');
        $query->setSortOrder('DESC');
        return $query;
    }

    public function preUpdate($supplier)
    {
        $supplier->setDeleted(0);
        return $supplier;
    }

    public function preCreate($supplier)
    {
        $supplier->setDeleted(0);
        return $supplier;
    }
}

And lastly my Supplier entity:

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * Suppliers
 *
 * @ORM\Table(
 *      name="suppliers",
 *      indexes={
 *          @ORM\Index(
 *              name="supplier_name", columns={"name"}
 *          )
 *      })
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks()
 */
class Suppliers
{

    const TYPE_INTERNAL = 'internal';
    const TYPE_EXTERNAL = 'external';
    const TYPE_LPE = 'lpe';

    protected static $types = array(
        self::TYPE_INTERNAL => 'Internal',
        self::TYPE_EXTERNAL => 'External',
        self::TYPE_LPE => 'LPE'
    );

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false, options={"unsigned":true})
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @Assert\NotNull()
     * @ORM\Column(name="type", type="string", nullable=false, options={"default":"lpe"})
     */
    private $type;

    /**
     * @var string
     *
     * @Assert\NotNull()
     * @ORM\Column(name="name", type="string", nullable=false)
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="created", type="datetime")
     */
    private $created;

    /**
     * @var string
     *
     * @ORM\Column(name="updated", nullable=true, type="datetime")
     */
    private $updated;

    /**
     * @var string
     *
     * @ORM\Column(name="deleted", type="boolean", options={"default":0})
     */
    private $deleted;

    /**
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Regions")
     * @ORM\JoinTable(name="supplier_regions",
     *      joinColumns={
     *          @ORM\JoinColumn(
     *              name="supplier_id",
     *              referencedColumnName="id"
     *          )
     *      },
     *      inverseJoinColumns={
     *          @ORM\JoinColumn(
     *              name="region_id",
     *              referencedColumnName="postcode"
     *          )
     *      }
     * )
     */
    private $regions;

    private $lpe;


    public function __construct()
    {
        $this->regions = new ArrayCollection();
    }

    public function getRegions()
    {
        return $this->regions;
    }

    public function setRegions($regions)
    {
        $this->regions = $regions;

        return $this;
    }

    public function getLpe()
    {
        return $this->lpe;
    }

    public function setLpe($lpe)
    {
        $this->lpe = $lpe;

        return $this;
    }

    /**
     * @return string
     */
    public function getLpeFirstName()
    {
        return $this->lpe->getUser()->getFirstName();
    }

    /**
     * @return string
     */
    public function getLpeLastName()
    {
        return $this->lpe->getUser()->getLastName();
    }

    /**
     * @return string
     */
    public function getLpeEmail()
    {
        return $this->lpe->getUser()->getEmail();
    }

    public function getContractType()
    {
        return $this->lpe->getContractType();
    }

    public function getUser()
    {
        return $this->lpe->getUser();
    }

    public function setUser($user)
    {
        $this->lpe->setUser($user);
        return $this;
    }

    public function setFirstName($name)
    {
        $this->user->setFirstName($name);
        return $this;
    }

    public function getFirstName()
    {
        return $this->user->getFirstName();
    }

    public function setLastName($name)
    {
        $this->user->setLastName($name);
        return $this;
    }

    public function getLastName()
    {
        return $this->getUser()->getLastName();
    }

    public function setEmail($email)
    {
        $this->getUser()->setEmail($email);
        return $this;
    }

    public function getEmail()
    {
        return $this->getUser()->getEmail();
    }

    /**
     * @var string
     */
    private $entityName;

    /**
     * Get id
     *
     * @return integer
     */
    public function nullId()
    {
        return $this->id =null;
    }

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set type
     *
     * @param string $type
     * @return User
     */
    public function setType($type)
    {
        $this->type = strtolower($type);

        return $this;
    }

    /**
     * Get type
     *
     * @return string
     */
    public function getType()
    {
        if ($this->type == 'lpe') {
            return strtoupper($this->type);
        }
        return ucwords($this->type);
    }

    /**
     * Set name
     *
     * @param string $name
     * @return User
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Set created
     *
     * @param string $created
     * @return $this
     */
    public function setCreated($created)
    {
        if (!empty($created)) {
            $this->created = $created;
        } else {
            $this->created = new \DateTime("now");
        }

        return $this;
    }

    /**
     * Get created
     *
     * @return string
     */
    public function getCreated()
    {
        return $this->created;
    }

    /**
     * Set updated
     *
     * @param string $updated
     * @return User
     */
    public function setUpdated($updated)
    {
        $this->updated = $updated;

        return $this;
    }

    /**
     * Get updated
     *
     * @return string
     */
    public function getUpdated()
    {
        return $this->updated;
    }

    /**
     * Set deleted
     *
     * @param boolean $deleted
     * @return User
     */
    public function setDeleted($deleted)
    {
        $this->deleted = $deleted;

        return $this;
    }

    /**
     * Get deleted
     *
     * @return boolean
     */
    public function getDeleted()
    {
        return $this->deleted;
    }

    /**
     * @ORM\PrePersist()
     */
    public function onPrePersist()
    {
        $this->created = new \DateTime();
        $this->updated = new \DateTime();
        if ($this->deleted === null) {
            $this->deleted = 0;
        }
        if ($this->type === null) {
            $this->type = 'lpe';
        }
        if ($this->name === null) {
            $this->name = '';
        }
    }

    /**
     * @ORM\PreUpdate()
     */
    public function onPreUpdate()
    {
        $this->created = new \DateTime();
        $this->updated = new \DateTime();
        if ($this->deleted === null) {
            $this->deleted = 0;
        }
    }

    /**
     * @return array
     */
    public static function getTypes()
    {
        return self::$types;
    }

    /**
     * Set entityName
     *
     * @param string $name
     * @return User
     */
    public function setEntityName($name)
    {
        $this->entityName = $name;

        return $this;
    }

    public function __toString()
    {
        if ($this->getUser() === null) {
            return 'Supplier' . ($this->id !== null ? ' #' . $this->id.'' : '' );
        }
        return (string) ($this->id !== null ? '#' . $this->id.' ' : '' ) . $this->getUser()->getEmail();
    }
}

Any suggestions? :)

like image 992
Kal Avatar asked Apr 07 '15 19:04

Kal


People also ask

Why entity manager is closed?

The EntityManager becomes closed as soon as an SQL exception is thrown by the underlying connection. The "real" exception has surely occurred before that.

What is the entity manager?

The EntityManager is an API that manages the lifecycle of entity instances. An EntityManager object manages a set of entities that are defined by a persistence unit. Each EntityManager instance is associated with a persistence context.


1 Answers

I think it is in your configuration file

doctrine:
[...]
    orm:
[...]
        mappings:
            AppBundle:
                type:      ~
                dir:       "Entity"
                prefix:    "AppBundle\Entity"
                is_bundle: ~

If it is not working, look over your namespaces, I think (but not sure) it should be like PROJECT\BUNDLE\Entity and not just BUNDLE\Entity (for both namespace and use statements)

like image 166
Thiryn Avatar answered Nov 15 '22 00:11

Thiryn