我正在尝试覆盖SonataUser/Admin/Model/UserAdmin
的{{1}},因为我需要从管理表单中删除一些默认字段。
所以我在我的包configureFormFields()
中复制了文件vendor/bundles/Sonata/UserBundle/Admin/Model/UserAdmin.php
并对其进行了修改。然后将其声明为服务:
app/Application/Sonata/UserBundle/Admin/Model/UserAdmin.php
现在问题: 我做对了吗?我如何告诉sonata管理员使用它?
答案 0 :(得分:16)
覆盖类应该在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
以反映您的捆绑结构。
答案 1 :(得分:2)
最好将捆绑包保留在src目录中:(请参阅创建捆绑包section)。
在这种情况下,如果您使用简易扩展,请确保使用--dest=src
以在src /中的Application名称空间内生成包。
php app/console sonata:easy-extends:generate SonataUserBundle --dest=src
通过在src/Application/Sonata/UserBundle
中创建覆盖包并将供应商包注册为父包,您不必创建新服务。这解释了如何正确覆盖捆绑包:overriding a bundle并且应该为您节省大量时间。
不要忘记在与父包相同的位置创建要覆盖的文件。
在您的情况下,您必须将供应商的粘贴SonataUser/Admin/Model/UserAdmin.php
复制到您的包src/Application/Sonata/UserBundle/Admin/Model/UserAdmin.php
中并根据需要进行修改。
这就是为什么重写bundle可以如此有用。