我知道我可以做很多事......但我想避免矫枉过正。
我有一个通用util方法的类。我希望能够从formType中调用其中一个方法。
我所做的是以下内容:
在formType中我添加了
use AppBundle\Util\GeneralUtil;
class HRMgmtFormType extends AbstractType
{
public function __construct(GeneralUtil $util)
{
$this->util = $util;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$timeCommitment = $this->util->generatePercentVectorByStep(1);
...all the rest of the stuff
当我从控制器调用它时,我有:
$form = $this->createForm(new HRMgmtFormType(new GeneralUtil()), array(...all the stuff I need here...);
有效。
这好吗/优雅?
我基本上避免将我的通用util类声明为服务,最重要的是将我的表单声明为服务(并在其中注入generalUtil服务)。
谢谢!
SN
答案 0 :(得分:1)
只要您拥有“GeneralUtil”类,就像现在这样简单:没有任何依赖关系和任何配置参数,您的解决方案是公平的。但是你应该考虑更多的方面:
如果是,那么最好从Symfony SOA(面向服务的体系结构)方法中获益并将您的代码重构为SOA和DI,这将允许您遵循另一个重要模式作为DRY(不要重复自己){ {3}}
更新到您的公司:
所以你可以从http://en.wikipedia.org/wiki/Don%27t_repeat_yourself
看到将表单类型定义为服务是一种很好的做法并且可以实现 非常容易在您的应用程序中使用。
但正如我已经解释过的utils类,类似的逻辑是关于表单的。因此,如果您计划重用您的表单,那么您可以将其作为服务来执行,但如果您将使用几个不同的表单来使用您的utils类,那么最好将表单保留为类,但为utils提供服务。此外,如果您认为有可能覆盖其他形式,即第三方形式,您可以这样做。
因此,作为服务的表单中的好处列表:
在多次使用的情况下,它只初始化一次
易于被其他形式覆盖
从参数ans DI其他服务全局配置