Php 定义渲染为细枝块的实体方法

Php 定义渲染为细枝块的实体方法,php,symfony,twig,Php,Symfony,Twig,我想以更面向对象的方式编写视图层,以利用面向对象模型的一些优点。我想首先定义一种行为,让我的模型能够指定细枝渲染的方式 我遇到了一个能很好地反映我想法的人 例如,假设我有一个用户模型,我想在我的网站上的几个地方显示它。我想定义一个“Twigable”接口,它的方法告诉twig如何渲染这个模型 我将如何以可伸缩的方式实现这一点 编辑:我做了一点实验。现在没有太多的抽象,包括这里可能指向我所追求的 我有我的模型User.php: 实体不应对其在前端的外观负责imho@DarkBee我想它可以有一个通

我想以更面向对象的方式编写视图层,以利用面向对象模型的一些优点。我想首先定义一种行为,让我的模型能够指定细枝渲染的方式

我遇到了一个能很好地反映我想法的人

例如,假设我有一个用户模型,我想在我的网站上的几个地方显示它。我想定义一个“Twigable”接口,它的方法告诉twig如何渲染这个模型

我将如何以可伸缩的方式实现这一点

编辑:我做了一点实验。现在没有太多的抽象,包括这里可能指向我所追求的

我有我的模型User.php:


实体不应对其在前端的外观负责imho@DarkBee我想它可以有一个通用的“display”(我知道需要更好的命名)类,实现一个接口。实体不必为它的外观负责,只需为它在前端的外观负责。显示类负责如何处理。我已经阅读了更新的问题。请注意,这样做会对实体施加很多约束,降低其他项目的可重用性,但如果您不关心这一点,您甚至可以使用
\uu toString()
方法返回
渲染
在某些时候,您可能希望在不同的页面中使用不同的模板多次渲染同一实体。相反,您可以创建一个细枝扩展并创建一个处理渲染的函数或过滤器。例如:user | render('custom')@SebastianRadu宏或include更适合这样做
twig:
    globals:
        twig_env: '@Twig\Environment'
{# ... inside index.html.twig #}
{% block body %}
{{ user.render(twig_env) }}
{% endblock %}
{# ... #}