私は教義オブジェクトのフォームの管理における内部化に問題があります。フォームは問題なく機能しましたが、その後、複数の言語のサポートを追加しました。
スキーマは次のようになります。
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() は空の文字列を返します。