2015-04-07 21 views
5

Sto provando a visualizzare solo un elenco. Il mio fornitore e Proprietà lista sono stati la visualizzazione fino a quando ho implementato l'elenco dei prodotti :(Nessun gestore entità definito per la classe

Ora ottengo questo errore con le liste del fornitore e di proprietà, ma non per l'elenco dei prodotti appena aggiunto:

enter image description here

Ecco la mia 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 

la mia classe admin:

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; 
    } 
} 

E infine il mio ente fornitore:

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(); 
    } 
} 

Qualche suggerimento? :)

risposta

1

penso che sia nel file di configurazione

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

Se non funziona, guardare oltre gli spazi dei nomi, credo (ma non sicuro) che dovrebbe essere come PROJECT\BUNDLE\Entity e non solo BUNDLE\Entity (per entrambe le dichiarazioni namespace e use)

+0

Sei sulla strada giusta, sembra che il problema è che ho alcune entità che sono definite da annotazioni come l'esempio sopra e alcuni che estendono i modelli di sylius che sono xml in una directory doctrine. Sembra che la presenza di quella directory interrompa la mappatura del resto delle mie entità. Potete specificare entrambi o si tratta di utilizzare un metodo e attenersi ad esso? – Kal

Problemi correlati