1

私の Symfony アプリケーションには 2 つのモデルがあります。最初のものはブログです:

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 と 1 対 1 の関係にあります。この 2 つの登録を 1 つの形式で行ってほしい。

そこで、BlogForm クラスを変更し、その中embeddedRelationでメソッドを使用しました。したがって、2 つのフォームが一緒に表示されます。問題は彼らの見方です!ユーザー登録フォーム (BlogForm に埋め込まれている) は子供のようです。私はこれを望んでいません... フィールドを同じインデントにしたいのです。

私のフォームビューは次のようなものです:

私の現在のビュー

しかし、私はこのようなものが欲しい:

ここに画像の説明を入力

これを行う最善の方法は何ですか?FormFormatter に関連していますか?

4

1 に答える 1

1

render* メソッドをチェックsfWidgetFormSchemaFormatterまたはレンダリングしましたか?

ここでほぼ関連するものに答えました。そして、ここに来たのとほぼ同じ問題だと思います: 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');
  }
}

(情報はsfのウェブサイトから来ています)

これが機能しない場合は、のvar_dump($name);前にaif (preg_matchを追加し、出力を質問に追加してください。

于 2012-06-20T12:52:44.167 に答える