1

我的 Symfony 应用程序中有两个模型。第一个是博客:

Blog:
  columns:
    name: { type: string(20), notnull: true, unique: true }
    title: { type: string(255), notnull: true }
    description: { type: string(255), notnull: true }
    admin_id: { type: bigint, notnull: true }
  relations:
    User:
      class: sfGuardUser
      local: admin_id
      ...

如您所见,此模型与 sfGuardUser 具有一对一的关系。我希望这两个注册以一种形式进行。

所以我更改了 BlogForm 类并embeddedRelation在其中使用了方法。所以两种形式只是一起出现。问题是他们的观点!用户注册表单(嵌入在 BlogForm 中)看起来像个孩子!我不想要这个......我希望这些字段具有相同的缩进。

我的表单视图是这样的:

我的当前视图

但我想要这样的东西:

在此处输入图像描述

做这个的最好方式是什么?它与FormFormatter有关吗?

4

1 回答 1

1

你有检查sfWidgetFormSchemaFormatter渲染*方法吗?

我在这里给出了几乎相关的答案。而且我认为这几乎与这里出现的问题相同:Removing table headers from embedRelation()

我认为最好的方法是使用sfWidgetFormSchemaFormatter或 render* 方法在模板中手动构建表单。


编辑:

关于我在这里回答的内容,尝试添加这样的自定义格式化程序(在lib/widget/sfWidgetFormSchemaFormatterAc2009.class.php):

class sfWidgetFormSchemaFormatterAc2009 extends sfWidgetFormSchemaFormatter
{
  protected
    // this will remove table around the embed element
    $decoratorFormat = "%content%";

  public function generateLabel($name, $attributes = array())
  {
    $labelName = $this->generateLabelName($name);

    if (false === $labelName)
    {
      return '';
    }

    // widget name are usually in lower case. Only embed form have the first character in upper case
    if (preg_match('/^[A-Z]/', $name))
    {
      // do not display label
      return ;
    }
    else
    {
      return $this->widgetSchema->renderContentTag('label', $labelName, $attributes);
    }
  }
}

然后将其添加到您的表单中ProjectConfiguration

class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    // ...

    sfWidgetFormSchema::setDefaultFormFormatterName('ac2009');
  }
}

(资料来自顺丰网站

如果这不起作用,请var_dump($name);在 the 之前添加一个if (preg_match并将输出添加到您的问题中。

于 2012-06-20T12:52:44.167 回答