2014-10-30 123 views
0

其实我对将表达式传递参数的最佳方式感到困惑。据我所知,有三种方式:symfony2:表单注入依赖注入

  1. 要打开窗体类为服务

  2. 要通过阵列选项参数传递

  3. 要通过的构造函数传递参数表格类别

什么是最好的/最干净的方式?谢谢

回答

1

在我看来:

  1. 要打开窗体类为服务 - 您使用,如果参数都可以通过DI,喜欢的EntityManager,路由器和其他服务等
  2. 要通过argum ents通过阵列选项 - “静态”数据,如:显示此字段仅供管理员使用,
+0

所以你说,如果我们需要记录器例如它只是**更好**将窗体转换为服务。但是我认为当从控制器调用表单时,只需通过构造函数或数组$ option就可以方便地传递参数:$ options:您不必将表单声明为您的服务文件,您没有更新服务文件,每当你意识到你需要另一个依赖等... – smarber 2014-10-31 10:12:16

+1

这只是我的意见。即使我必须修改服务声明,我更喜欢干净的代码。 控制器中的代码较少=错误较少。下一步的改进是我不必修改控制器来更改表​​格中的示例:添加一些字段。我只需要覆盖更简单的服务,并且不要复制代码(控制器)来执行此操作。在我的情况下,FormType作为服务总是大而复杂,所以对我来说这是更好的解决方案。 – jamek 2014-10-31 13:22:42

+0

我同意你的观点,作为一种服务,表单更独立。 +1 – smarber 2014-10-31 13:48:22

0

对于我的大部分表格,我创建了一个单独的表格类。当我需要使用预填充数据呈现表单时,我在我的控制器中加载实体,并在构建表单时传递该实体。举例来说,如果我有一个名为$用户链接到注册实体的实体,我将填充我的形式是这样的:

$registration = $user->getRegistration(); 

    $form = $this->createForm(new RegistrationType(), $registration, array()); 

然后我呈现在树枝的$形式:

return $this->render(
     'AcmeAccountBundle:Account:register.html.twig', 
     array('form' => $form->createView()) 
    ); 
+1

这又如何回答将参数传递给窗体的问题? – Cerad 2014-10-31 02:17:37

+0

$注册变量是注册表单使用的相同类型,这将填充表单。当你说传递参数时,我假设你的意思是你想让字段填充特定的项目,这将做到这一点。 – George 2014-10-31 16:07:51