2015-01-21 106 views
1

我想擴展奏鳴曲用戶包的用戶實體,但它總是失敗(至少當我想與奏鳴曲管理束一起使用時)。如果我使用Application/Sonata/UserBundle/Entity/User Entity,它可以工作,我可以在儀表板中對其進行編輯。擴展用戶實體

我的實體是這樣的:

<?php 

namespace MyNamespace\MyBundle\Entity; 
use Doctrine\ORM\Mapping as ORM; 
use Doctrine\ORM\EntityManager; 
use Sonata\UserBundle\Entity\BaseUser as BaseUser; 

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 
class User extends BaseUser 
{ 
/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 
} 

在我config.yml我定義以下選項:

fos_user: 
    db_driver: orm 
    firewall_name: main 
    user_class:  MyNamespace\MyBundle\Entity\User 
    group: 
     group_class: Application\Sonata\UserBundle\Entity\Group 
     group_manager: sonata.user.orm.group_manager 
    service: 
    user_manager: sonata.user.orm.user_manager 

和:

sonata_user: 
security_acl: true 
manager_type: orm 
class: 
    user: MyNamespace\MyBundle\Entity\User 

登錄工作正常,但後來我收到錯誤信息

「在模板呈現過程中出現異常(」無法爲指定路由生成URL「admin_sonata_user_user_create」,因爲此路由不存在。「)在SonataAdminBundle中:Block:block_admin_list.html.twig,第39行「。

我的routing.yml是這樣的:

admin: 
    resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml' 
    prefix:/

_sonata_admin: 
    host:  www.mydomain.com 
    resource: . 
    type: sonata_admin 
    prefix:/
    schemes: [https] 

即使我按照這個教程(Extending Sonata User Bundle and adding new fields)一步一步,我得到了同樣的錯誤。

+0

可以執行: 'php app/console router:debug | grep admin_sonata_user_user_create' – Pawel 2015-01-21 13:06:34

+0

是的,沒有結果,因爲路由完全丟失。如果我切換回默認的sonata-user-bundle用戶實體,路由將再次運行並出現在路由器:debug輸出中。 – dominikweber 2015-01-21 13:12:23

+0

爲什麼不擴展SonataUser而不是FOSUserBundle實體?我只是猜測,那奏鳴曲擴展了FOS用戶?如果您正在使用此捆綁包,YOu不能省略SonataUser實體。 – Pawel 2015-01-21 14:40:55

回答

1

Application/Sonata/UserBundle/Entity/User已擴展Sonata/UserBundle/Entity/User爲什麼不只是爲了改變那裏而不是另一個班?

它已經擴展了捆綁包,因此您可以在其中進行所有更改。我把我的額外領域放在那裏。

我的文件,應用程序/索納塔/ UserBundle /實體/ user.php的是這樣的:

namespace Application\Sonata\UserBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Sonata\UserBundle\Entity\BaseUser as BaseUser; 

/** 
* User 
* @ORM\Entity 
* @ORM\Table(name="fos_user_user") 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @var integer 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

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

如果你真的想使用你需要採取有關路由照顧另一個類。

檢查\vendor\sonata-project\user-bundle\Resources\config\admin_orm.xml - 這是原始類作爲服務添加的地方。

您可以在那裏看到%sonata.user.admin.user.entity%參數 - 如果要更改爲其他類,則可以在配置中更改此參數。我認爲比改變fos_user.user_class更好。

您也可以將整個文件移動到您的Application/Sonata/UserBudle但你需要加載它裏面DependencyInjection/ApplicationSonataUserExtension.php

順便說一句,這是索納塔真正棘手哪些用戶捆綁爲帕維爾寫了,並採取了很多的調試,使之工作

+0

非常感謝您的幫助,這終於爲我工作。我還需要刪除Resources/config/doctrine文件夾以便能夠使用註釋和教義:generate:entities(http://stackoverflow.com/questions/14042010/annotations-in-extended-sonata-user-class-not -being-read) – dominikweber 2015-01-25 12:43:00

+0

是的,你是對的。我忘了寫關於刪除文件夾 - 對不起。很高興你設法讓它爲你工作:) – Krewetka 2015-01-26 12:53:01