0

私は教義オブジェクトのフォームの管理における内部化に問題があります。フォームは問題なく機能しましたが、その後、複数の言語のサポートを追加しました。

スキーマは次のようになります。

content:
  actAs: 
    Timestampable: ~ 
    I18n:
      fields: [title, content]
  columns:
    parent: { type: integer }
    title: { type: string(255), notnull: true, unique: true }
    slug: { type: string(255), notnull: true, unique: true }
    content: { type: string }
    link: { type: string(255) }
    ord: { type: integer }
    type: { type: integer, default: 0 }
  relations:
    content: { onDelete: CASCADE, local: parent, foreign: id }
  indexes:
    parent: { fields: [parent] }    
    slug: { fields: [slug] } 
    type: { fields: [type] }    

管理ジェネレーター:

generator:
  class: sfDoctrineGenerator
  param:
    model_class:           content
    theme:                 admin
    non_verbose_templates: true
    with_show:             false
    singular:              ~
    plural:                ~
    route_prefix:          content
    with_doctrine_route:   true
    actions_base_class:    sfActions

    config:
      actions: ~
      fields:  
        title: { is_real: false }
        typeFull: { label: Type }
      list:    
        display: [=title, typeFull]        
        sort: ord 
        max_per_page: 100 
      filter:  
        class: false
      form:    
        class: adminContentForm
      edit:    ~
      new:     ~

そして最後にフォーム:

class adminContentForm extends BasecontentForm
{
  public function configure()
  {        
    unset($this['slug'], $this['ord'], $this['created_at'], $this['updated_at']);

    $this->embedI18n(array('de', 'fr'));
    $this->widgetSchema->setLabel('de', 'Deutsch');
    $this->widgetSchema->setLabel('fr', 'French');
  }
}

アクション クラスを変更しませんでした。

新しいエントリを作成したいときは、すべてうまくいきます。しかし、既存のエントリを更新しようとすると、奇妙な問題が発生します。埋め込まれた i18n フォーム (タイトル、コンテンツ)のフィールドのみが保存され、メイン フォームのフィールド (親、リンク、タイプ) は変更されません。

フォームから埋め込みを削除すると、親、リンク、タイプが適切に保存されます。埋め込みを追加すると、タイトルとコンテンツのみが保存されます。

同様の問題に遭遇したことがありますか?Symfony 1.4.17 を使用しています。


編集:

これをデバッグ用に actions.class.php の processForm() メソッドに追加すると、次のようになります。

var_dump($form->getValue('link'));
$content = $form->save();        
var_dump($content->getLink());
exit();

... フィールド リンクの値が正しく送信されていることがわかりますが、フォームを保存した後、値が保存されません。$form->getValue('link') は適切な値を返しますが、$content->getLink() は空の文字列を返します。

4

1 に答える 1

2

2日経って、やっと届きました!奇妙な動作は、列「コンテンツ」、特にテーブルの名前と同じ名前によって引き起こされました。i18n 動作を使用しなければ問題ありませんでした。しかし、i18nを追加した後、すべてが予期せず動作し始めましたが、エラーメッセージは表示されなかったため、理解するのに非常に長い時間がかかりました.

したがって、列名はテーブルの名前と同じであってはなりません。

于 2012-05-16T14:22:40.840 に答える