我试图重写SonataUser/Admin/Model/UserAdmin
的configureFormFields()
因为我需要从管理表单中删除一些默认的领域。 所以我复制该文件vendor/bundles/Sonata/UserBundle/Admin/Model/UserAdmin.php
在我捆绑app/Application/Sonata/UserBundle/Admin/Model/UserAdmin.php
和修改它。 然后宣布它作为一项服务:
# app/application/Sonata/UserBundle/Resources/config/services.yml
services:
application_user.registration.form.type:
class: Application\Sonata\UserBundle\Admin\Model\UserAdmin
arguments: [%sonata_user.model.user.class%]
tags:
- { name: form.type, alias: application_user_admin }
现在的问题:我做对吗? 我怎么能告诉奏鸣曲管理员可以使用它?
首要类应该在config.yml进行设置:
# app/config/config.yml
sonata_user:
admin:
user:
class: MyCompany\UserBundle\Admin\Model\UserAdmin
扩展原有UserAdmin:
namespace MyCompany\UserBundle\Admin\Model;
use Sonata\AdminBundle\Form\FormMapper;
class UserAdmin extends \Sonata\UserBundle\Admin\Model\UserAdmin
{
protected function configureFormFields(FormMapper $formMapper)
{
// new logic
}
}
当然,改变类的名称MyCompany\UserBundle\Admin\Model\UserAdmin
以反映您的束状结构。
这是一个更好的做法是让你的包在src目录下,而不是:(请参阅创建束段 )。 在这种情况下,如果使用的是简单的延伸,确保使用--dest=src
以产生的src /应用程序命名空间内的软件包。
php app/console sonata:easy-extends:generate SonataUserBundle --dest=src
通过创建你的首要包src/Application/Sonata/UserBundle
和注册供应商捆绑作为父母,你就不必创建一个新的服务。 这说明你如何正确地重写包: 压倒一切的捆绑 ,并应为您节省大量的时间。
不要忘了创建要在相同的位置,你的父母捆绑覆盖文件。 在你的情况,你就必须复制粘贴SonataUser/Admin/Model/UserAdmin.php
从供应商到你的包src/Application/Sonata/UserBundle/Admin/Model/UserAdmin.php
并修改它,如你所愿。 这就是为什么压倒一切的束可以如此有用。