如何从Symfony控制器中提取操作?

时间:2014-08-29 18:08:06

标签: php symfony decorator php-5.3

我正在重构一个基于Symfony 2.2 / PHP 5.3的不那么复杂的网站,这里的主要问题是重复代码。

有两个捆绑包,一个用于主网站,另一个用于移动版本。这些差异不仅存在于模板和静态文件中,因为它们包含业务规则等方面的一些差异。

目前这两个捆绑包有三个控制器,一个是主要的控制器,另一个是异常控制器,但第三个是“母控制器”,它包含几种常见的方法和行为,并由实际的控制器继承。
这带来了一个小问题,因为我不能简单地使移动包的动作控制器继承自桌面包。我所能做的只是在移动设备DefaultController和桌面设备之间实现继承...因此,除了一些自定义线路外,我仍然有一堆几乎相同的动作。

有没有办法将这些操作提取到泛型类,然后将它们导入控制器(就像我们在Yii的Action类中一样)?我搜索了使用装饰器模式无济于事,并想知道是否有任何已知的方法来实现这个想法。

1 个答案:

答案 0 :(得分:0)

由于你有两个捆绑包,我的第一个想法是创建另一个捆绑包(让我们称之为" CoreBundle")并在那里创建CommonController并将常用逻辑放入其中。然后,让其他控制器extend这个CommonController

更清洁但更难的解决方案是创建可由所需数据/服务进行参数化的服务。