5

Sono davvero nervoso a causa della mancanza di risorse sufficienti per l'installazione di SonataDoctrineMongoDBAdminBundle e delle sue dipendenze come sonataUserBundle. Ho provato a installare questo pacchetto per 15 giorni. Ho fatto di tutto e di nuovo quello che racconta nella pagina ufficiale di Sonata. Ma non funziona correttamente. Dopo l'estensione sonataUserBundle come ApplicationUserBundle miei documenti finali sono:Come installare correttamente SonataDoctrineMongoDBAdminBundle?

User.php

<?php 

/** 
* This file is part of the <name> project. 
* 
* (c) <yourname> <youremail> 
* 
* For the full copyright and license information, please view the LICENSE 
* file that was distributed with this source code. 
*/ 

namespace Application\Sonata\UserBundle\Document; 

use Sonata\UserBundle\Document\BaseUser as BaseUser; 

/** 
* This file has been generated by the EasyExtends bundle (http://sonata-project.org/bundles/easy-extends) 
* 
* References : 
* working with object : http://www.doctrine-project.org/docs/mongodb_odm/1.0/en/reference/working-with-objects.html 
* 
* @author <yourname> <youremail> 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @var integer $id 
    */ 
    protected $id; 

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

Group.php

<?php 

/** 
* This file is part of the <name> project. 
* 
* (c) <yourname> <youremail> 
* 
* For the full copyright and license information, please view the LICENSE 
* file that was distributed with this source code. 
*/ 

namespace Application\Sonata\UserBundle\Document; 

use Sonata\UserBundle\Document\BaseGroup as BaseGroup; 

/** 
* This file has been generated by the EasyExtends bundle (http://sonata-project.org/bundles/easy-extends) 
* 
* References : 
* working with object : http://www.doctrine-project.org/docs/mongodb_odm/1.0/en/reference/working-with-objects.html 
* 
* @author <yourname> <youremail> 
*/ 
class Group extends BaseGroup 
{ 
    /** 
    * @var integer $id 
    */ 
    protected $id; 

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

config.yml

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

framework: 
    #esi:    ~ 
    translator:  { fallback: %locale% } 
    secret:   %secret% 
    router: 
     resource: "%kernel.root_dir%/config/routing.yml" 
     strict_requirements: %kernel.debug% 
    form:   ~ 
    csrf_protection: ~ 
    validation:  { enable_annotations: true } 
    templating: 
     engines: ['twig'] 
     #assets_version: SomeVersionScheme 
    default_locale: "%locale%" 
    trusted_proxies: ~ 
    session:   ~ 
    fragments:  ~ 

# Twig Configuration 
twig: 
    debug:   %kernel.debug% 
    strict_variables: %kernel.debug% 

# Assetic Configuration 
assetic: 
    debug:   %kernel.debug% 
    use_controller: false 
    bundles:  [ ] 
    #java: /usr/bin/java 
    filters: 
     cssrewrite: ~ 
     #closure: 
     # jar: %kernel.root_dir%/Resources/java/compiler.jar 
     #yui_css: 
     # jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar 

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

doctrine_mongodb: 
    connections: 
     default: 
      server: mongodb://localhost:27017 
      options: {} 
    default_database: test_database 
    document_managers: 
     default: 
      auto_mapping: true 


# app/config/config.yml 
sonata_block: 
    default_contexts: [cms] 
    blocks: 
     sonata.admin.block.admin_list: 
      contexts: [admin] 

     #sonata.admin_doctrine_orm.block.audit: 
     # contexts: [admin] 

     sonata.block.service.text: 
     sonata.block.service.rss: 

     # Some specific block from the SonataMediaBundle 
     #sonata.media.block.media: 
     #sonata.media.block.gallery: 
     #sonata.media.block.feature_media:  


sonata_user: 
    security_acl: false 
    manager_type: mongodb # can be orm or mongodb 

sonata_admin: 
    security: 
     handler: sonata.admin.security.handler.role 

    title:  Sonatas Project 
    title_logo: /bundles/sonataadmin/logo_title.png 
    templates: 
     # default global templates 
     layout: SonataAdminBundle::standard_layout.html.twig 
     ajax: SonataAdminBundle::ajax_layout.html.twig 
     dashboard: SonataAdminBundle:Core:dashboard.html.twig 

     # default actions templates, should extend a global templates 
     list: SonataAdminBundle:CRUD:list.html.twig 
     show: SonataAdminBundle:CRUD:show.html.twig 
     edit: SonataAdminBundle:CRUD:edit.html.twig 

    dashboard: 
     blocks: 
      # display a dashboard block 
      - { position: left, type: sonata.admin.block.admin_list } 

      # Customize this part to add new block configuration 
      - { position: right, type: sonata.block.service.text, settings: { content: "<h2>Welcome to the Sonata Admin</h2> <p>This is a <code>sonata.block.service.text</code> from the Block Bundle, you can create and add new block in these area by configuring the <code>sonata_admin</code> section.</p> <br /> For instance, here a RSS feed parser (<code>sonata.block.service.rss</code>):"} } 
      - { position: right, type: sonata.block.service.rss, settings: { title: Sonata Project's Feeds, url: http://sonata-project.org/blog/archive.rss }} 

    # set to true to persist filter settings per admin module in the user's session 

fos_user: 
    db_driver:  mongodb # can be orm or odm 
    firewall_name: main 
    user_class:  Application\Sonata\UserBundle\Document\User 

    group: 
     group_class: Application\Sonata\UserBundle\Document\Group 

security.yml

jms_security_extra: 
    secure_all_services: false 
    expressions: true 

security: 

    encoders: 
     FOS\UserBundle\Model\UserInterface: sha512 

    role_hierarchy: 
     ROLE_ADMIN:  [ROLE_USER, ROLE_SONATA_ADMIN] 
     ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 
     SONATA: 
      - ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT # if you are using acl then this line must be commented 

    providers: 
     fos_userbundle: 
      id: fos_user.user_manager 

    firewalls: 
     # -> custom firewall for the admin area of the URL 
     admin: 
      switch_user:  true 
      context:   user 
      pattern:   /admin(.*) 
      form_login: 
       provider:  fos_userbundle 
       login_path:  /admin/login 
       use_forward: false 
       check_path:  /admin/login_check 
       failure_path: null 
       use_referer: true 
      logout: 
       path:   /admin/logout 
       target:   /admin/login 

      anonymous: true 
     # -> end custom configuration 

     # defaut login area for standard users 
     main: 
      switch_user:  true 
      context:   user 
      pattern:   .* 
      form_login: 
       provider:  fos_userbundle 
       login_path:  /login 
       use_forward: false 
       check_path:  /login_check 
       failure_path: null 
      logout:    true 
      anonymous:   true 

    access_control: 
     # URL of FOSUserBundle which need to be available to anonymous users 
     - { path: ^/_wdt, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/_profiler, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 

     # -> custom access control for the admin area of the URL 
     - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/login-check$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     # -> end 

     - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 

     # Secured part of the site 
     # This config requires being logged for the whole site and having the admin role for the admin part. 
     # Change these rules to adapt them to your needs 
     - { path: ^/admin, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] } 
     - { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY } 

Dopo tutto quello che ho eseguito:

php app/console fos:user:create --super-admin 

Il compito mi dice che l'utente creato con successo. Poi controllo il mio mongodb e c'è solo un record con 3 campi.

Ecco l'output:

> db.fos_user_user.findOne(); 
{ 
    "_id" : 1, 
    "createdAt" : ISODate("2013-05-25T19:43:52Z"), 
    "updatedAt" : ISODate("2013-05-25T19:43:52Z"), 
    "gender" : "u" 
} 

Come si vede non c'è un nome utente o password o un altro campo che indicava nel file di documenti fos' sonata di o. Ho installato SonataDoctrineORMAdminBundle per verificare se c'è qualche problema con SonataAdminBundle ma funziona come un fascino con mysql.

Sto diventando così pazzo. Per favore dimmi, qual è il modo corretto di installare sonataAdminBundle con mongoDB?

Grazie per l'interesse.

+0

La tua configurazione sembra corretta, hai provato ad aggiungere '' 'public function __construct() {parent :: __ construct(); } '' 'nella tua classe utente? –

+0

@ Pier-LucGendreau sì Il metodo __construct() è già stato aggiunto ma non è cambiato nulla. – user1150508

+0

@ user1150508 hai mai risolto questo? – codecowboy

risposta

1

Sembra che la mappatura dell'ereditarietà non funzioni correttamente, ho seguito le istruzioni ma questo ha causato lo stesso problema. I Got It risolto modificando riferimento alla BaseUser alla classe forniti da FOS \ UserBundle

# Application\Sonata\UserBundle\Document\User.php 

namespace Application\Sonata\UserBundle\Document; 

//use Sonata\UserBundle\Document\BaseUser as BaseUser; 
use FOS\UserBundle\Document\User as BaseUser; 
+0

Sì, come dici tu, ho usato FOS \ UserBundle \ Document \ User, bu dopo questo, si sono verificati alcuni errori quando si utilizzava l'amministratore sonata come 'non c'è campo del nome utente'. C'è un bug sulla mappatura dell'ereditarietà. Ho fatto un sacco di ricerche e ho cercato di rifattorizzare il codice, finalmente non sono riuscito a trovare la soluzione magica. E ho bisogno di una soluzione magica. – user1150508

+0

Ho incontrato altri problemi con Mongo e SonataMediaBundle e ho deciso di utilizzare MySQL. Mongo e Sonata sembrano ancora un po 'incompleti. –

0

Sono stucked allo stesso punto.

Ho creato user.php in una cartella diversa con un nome diverso, per la mia organizzazione.

La differenza è che ho messo direcly annotazioni mongodb

namespace myProject\BackEndBundle\Document; 

use FOS\UserBundle\Document\User as BaseUser; 
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

/** 
* @MongoDB\Document 
*/ 
class BackEndUser extends BaseUser { 
    /** 
    * @MongoDB\Id 
    */ 
    protected $id; 

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

    public function __construct() 
    { 
     parent::__construct(); 
     // your own logic 
    } 
} 

Ora creazione di utenti e le opere di autenticazione, ma la gestione degli utenti in SonataAdminBundle non funziona.

1

ero anche avendo problemi con questo, gli utenti sono stati creati con solo un ID, genere: 'u', createdAt, ecc E con questo, sono stato in grado di farlo funzionare:

# app/config/config.yml 
doctrine_mongodb: 
    connections: 
     default: 
      server: mongodb://localhost:27017 
      options: {} 
    default_database: test 
    document_managers: 
     default: 
      mappings: 
       ApplicationSonataUserBundle: ~ 
       SonataUserBundle: ~ 
       FOSUserBundle: ~ 

Spero che qualcuno lo trovi utile.

+0

puoi pubblicare i tuoi file di configurazione di lavoro completi? – codecowboy