假设我有一个"book"实体类。它链接到"作者"实体类。在我的图书存储库中,我有一个名为 getTitle()
的方法,它连接了来自书籍的信息和作者属性。
现在,我希望从我的任何视图中,当我调用 {{thisBook}}
时,会显示 getTitle(( 结果。
本能地,我想它需要在我的书籍实体中创建一种__toString()
方法,该方法调用我的书籍存储库的 getTitle(( 方法。但是每个人都建议不要这样做(请参阅:从实体调用存储库方法,如何在symfony2中访问实体的存储库方法?
我应该"强制"系统吗?还是有更清洁的方法?这听起来很微不足道,一定有一个"官方"和简单的方法......
本身不包括对外部资源的访问权限,则在实体本身中定义方法没有问题。因此,如果您所做的只是连接来自实体本身的值,那就没有问题了(谷歌搜索所谓的anemic
和rich
实体(。
在这种情况下,使用服务之类的东西绝对是矫枉过正的。基本上,您不应该访问实体中的服务(以及存储库或其他任何实际执行某些工作的东西(,它们只是一个存储。但是访问实体本身的值甚至相关实体的值都可以。
创建一个类似 src/Service/SetupHelper.php
的服务:
<?php
namespace AppService;
use AppEntityUser;
use DoctrineORMEntityManagerInterface;
use SymfonyComponentHttpFoundationSessionSessionInterface;
class SetupHelper
{
private $em;
private $session;
public function __construct(EntityManagerInterface $em, SessionInterface $session)
{
$this->em = $em;
$this->session = $session;
}
public function getName(){
return $this->getUser()->getName();
}
}
}
自定义服务后,您可以在任何树枝中调用函数,如下所示:
<title>{% block title %}{{ SetupHelper.getName() }}!{% endblock %}</title><title>{% block title %}{{ SetupHelper.getName() }}!{% endblock %}</title>