5

Naprawdę się denerwuję z powodu braku wystarczającej ilości zasobów do zainstalowania SonataDoctrineMongoDBAdminBundle i jego zależności takich jak sonataUserBundle. Próbowałem zainstalować ten pakiet przez 15 dni. Zrobiłem wszystko co w naszej mocy i znowu to, co opowiadałem na oficjalnej stronie sonaty. Ale to nie działa poprawnie. Po rozszerzenie sonataUserBundle jak ApplicationUserBundle moje ostatnie dokumenty to:Jak poprawnie zainstalować 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 } 

Wszakże biegnę:

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

Zadaniem mówi mi użytkownikowi utworzony pomyślnie. Potem sprawdzam moją monondę i jest tylko zapis z 3 polami.

Oto wynik:

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

Jak widać nie jest nazwa użytkownika lub hasło lub inne pole, które wskazał w Sonaty lub plików dokumentów fos. Zainstalowałem SonataDoctrineORMAdminBundle, aby sprawdzić, czy nie ma żadnego problemu z SonataAdminBundle, ale działa jak urok z mysql.

Robię się taki szalony. Proszę mi powiedzieć, jaki jest właściwy sposób instalacji sonataAdminBundle z mongoDB?

Dziękuję za zainteresowanie.

+0

Twoja konfiguracja wygląda dobrze, czy próbowałeś dodać funkcję publiczną __construct() {parent :: __ construct(); } '' 'w twojej klasie użytkownika? –

+0

@ Metoda Pier-LucGendreau yes __construct() została już dodana, ale nic się nie zmieniło. – user1150508

+0

@ user1150508 kiedykolwiek to rozwiązałeś? – codecowboy

Odpowiedz

1

Wygląda na to, że mapowanie dziedziczenia nie działa poprawnie, postępowałem zgodnie z instrukcjami, ale prowadzi to do tego samego problemu. I got to naprawić zmieniając odniesienie do BaseUser do klasy dostarczonych przez 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

Tak, jak mówisz, użyłem FOS \ UserBundle \ Document \ User, bu po tym, niektóre błędy wystąpiły podczas używania administratora sonata, np. "Nie ma pola nazwy użytkownika". Występuje błąd związany z mapowaniem dziedziczenia. Zrobiłem mnóstwo wyszukiwań i próbowałem zmienić kod, w końcu nie mogłem znaleźć magicznego rozwiązania. I potrzebuję magicznego rozwiązania. – user1150508

+0

Wpadłem na inne problemy z Mongo i SonataMediaBundle i zdecydowałem się użyć MySQL. Mongo i Sonata wydają się jeszcze trochę niekompletne .. –

0

stucked jestem w tym samym punkcie.

Utworzono user.php w innym folderze o innej nazwie dla mojej organizacji.

Różnica polegała na tym, że kładę direcly MongoDB Adnotacje

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

Teraz tworzenie uwierzytelniania użytkownika i prace, ale zarządzanie użytkownikami w SonataAdminBundle nie działa.

1

Byłem też problemy z tym, użytkownicy powstały tylko z ID, płeć: „U”, createdAt itp A z tym, że jestem w stanie zrobić to działa:

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

Mam nadzieję, że ktoś uzna to za przydatne.

+0

Czy możesz zamieścić swoje działające pliki konfiguracyjne? – codecowboy