我应该如何注册我的 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 - 如何仅显示与用户相关的实体?