我应该如何注册我的 Sonata 应用程序的新管理类?

Posted

技术标签:

【中文标题】我应该如何注册我的 Sonata 应用程序的新管理类?【英文标题】:How should I register my Sonata application's new admin class? 【发布时间】:2018-07-10 06:03:33 【问题描述】:

我正在使用 Sonata 管理包为博客构建后端。我创建了一个新的 Post 实体并使用sonata:admin:generate 生成了一个名为 PostAdmin 的管理类。这个管理类扩展了 AbstractAdmin。到目前为止,一切都很好。

按照https://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/form_field_definition.html,我在我的类中添加如下代码:

public function validate(ErrorElement $errorElement, $object)


    die('At least the validate() method is being called.'); 

    $errorElement
        ->with('author')
        ->assertNotBlank()
        ->assertNotNull()
        ->end();

    parent::validate($errorElement, $object); // TODO: Change the autogenerated stub

...但我的 die() 语句似乎没有被调用。 (此外,当我删除 die() 调用时,断言似乎被忽略了,因为我可以将“作者”字段留空并仍然保存记录。)

====

更新 #1:根据https://symfony.com/doc/3.x/bundles/SonataAdminBundle/reference/conditional_validation.html,我尝试抛出异常而不是死亡。即使使用这种更好的调试技术,该方法似乎也没有被调用。

更新 #2:看起来我的 PostAdmin 类中的任何方法都没有被调用。 我是否需要在某个地方注册 PostAdmin 类才能调用其方法?

【问题讨论】:

显然没有调用validate()方法。 确实,看起来我的 PostAdmin 类中的任何方法都没有被调用。我已经相应地更新了问题。 【参考方案1】:

我找到了答案。太丢脸了。

有一个名为 PostAdminOld.php 的旧文件,其中包含我的 PostAdmin 类的副本。绝望地在我的项目上运行make install,我看到以下消息帮助我确定了问题:

Warning: Ambiguous class resolution, "AppBundle\Admin\PostAdmin" was found in both "/usr/src/app/src/AppBundle/Admin/PostAdminOld.php" and "/usr/src/app/src/AppBundle/Admin/PostAdmin.php", the first will be used.
Warning: Ambiguous class resolution, "AppBundle\Controller\PostAdminController" was found in both "/usr/src/app/src/AppBundle/Controller/PostAdminControllerOld.php" and "/usr/src/app/src/AppBundle/Controller/PostAdminController.php", the first will be used.

...就是这样。删除旧的管理类定义让我可以看到我最近的更改。

【讨论】:

以上是关于我应该如何注册我的 Sonata 应用程序的新管理类?的主要内容,如果未能解决你的问题,请参考以下文章

Sonata + Fos_user - 如何仅显示与用户相关的实体?

在Symfony 4上的Sonata管理页面中创建新页面

Sonata Admin - 只允许显示登录用户创建的内容

Symfony & Sonata:如何将 javascript 添加到实体管理表单?

Sonata 管理仪表板中仅显示两个管理面板

在 Symfony 2 项目的 Sonata Admin 中使用自定义视图页面进行图像预览