Symfony 1.4嵌入表单字段在同一缩进

时间:2012-06-20 12:41:27

标签: php symfony1 symfony-1.4 symfony-forms

我的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中)看起来像孩子!我不希望这样......我希望字段是同一个缩进。

我的表单视图是这样的:

My Current View

但我想要这样的事情:

enter image description here

最好的方法是什么?它与FormFormatter有关吗?

1 个答案:

答案 0 :(得分:1)

您是否检查过sfWidgetFormSchemaFormatterrender* method

我给出了几乎与here相关的答案。我认为这几乎是同一个问题:Removing table headers from embedRelation()

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


修改

关于我已回答here的问题,请尝试添加这样的自定义格式化程序(在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');
  }
}

(信息来自sf website

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