私は次のコードを持っています、私はこれが私がやろうとしていることをする正しい方法ではないと信じています。
これが私が達成したいことです
新しい言語キーとそのキーの翻訳を追加するページがあります。翻訳テキストボックスは動的です(言語テーブルから取得)。各テキストフィールドの名前は、その言語のロケール(言語テーブルにも格納されています)であり、それを使用して言語ID(翻訳テーブルにリンクされています)を取得します
これが私のデータベーステーブルです
言語
id(AI)--------> languageid
ロケール
languageName
翻訳
id(AI)
languageid
languagekey
翻訳
したがって、言語テーブルから、そこにあるはずのテキストボックスのリストを取得し、それらをループします
ユーザーが保存を押すと、次の方法で入力内容を保存します
if ($form->isValid()) {
print_r($form->getData()); // debug
foreach($form->getData() as $key => $value){ // get the submitted data
$oTranslation = new Translations(); // creat a new entity object
if($key == 'languageKey'){ // if it was the language key text field
$languageKey = $value;
continue;
}
$locale = $key; // the locale to extract the language id later on
$translation = $value;
//----- start getting the language id
$language = $this->getDoctrine()
->getRepository('CodeizSDBTranslatorBundle:Languages');
$query = $language->createQueryBuilder('l')
->select('l.id')
->where('l.locale = :locale')
->setParameter('locale' , $locale)
->getQuery();
$id = $query->getResult();
//----- end getting the language id
$oTranslation->setLanguageId($id[0]['id']); // setting the vlaues
$oTranslation->setLanguageKey($languageKey);
$oTranslation->setTranslation($translation);
$em = $this->getDoctrine()->getManager();
$em->persist($oTranslation);
$em->flush();// getting them into the database
}
return $this->redirect($this->generateUrl('codeiz_sdb_translator_addlanguagekey')); // redirect to some place
}
私は自分が何をしたかが仕事を成し遂げたことを知っていますが、ここに私の質問があります..
それらはデータをDBに正しく保存する方法ですか、それともより良い方法がありますか..