【发布时间】:2015-08-22 02:15:56
【问题描述】:
我
我使用一个集合字段来显示我正在创建的项目的所有文本(一个集合用于法语,另一个用于英语),但我选择不显示字段语言,因为用户不应该能够改变这一点。为此,我写道:
{% for description in form.descriptions %}
{% if loop.index == 1 %}
French
{% elseif loop.index == 2 %}
English
{% endif %}
<li>
{% do description.language.setRendered %}
...
</li>
{% endfor %}
问题是我第一次尝试这样编写我的控制器:
public function ajoutAction(Request $request)
{
//Crée un nouveau projet
$nouveauProjet = new Projet();
//Crée les descriptions
$descriptionFr = new ProjetInt();
$descriptionEn = new ProjetInt();
//Indique le bon code de langue pour les descriptions
$descriptionFr->setLangue('fr');
$descriptionEn->setLangue('en');
//Associe le projet et les descriptions
$nouveauProjet->addDescription($descriptionFr);
$nouveauProjet->addDescription($descriptionEn);
$descriptionFr->setProjet($nouveauProjet);
$descriptionEn->setProjet($nouveauProjet);
//Formulaires pour la création d'un projet
$formulaire=$this->createForm(new ProjetType(), $nouveauProjet);
//On surveille le formulaire
$formulaire->handleRequest($request);
//Si le formulaire est valide
if($formulaire->isValid())
{
...
}
return $this->render('AdminBundle::ajoutProjet.html.twig',array(
'formulaire'=>$formulaire->createView()
));
}
问题是当我提交表单时,由于我在模板中所做的事情,它没有找到语言,所以我的控制器看起来像这样:
public function ajoutAction(Request $request)
{
//Crée un nouveau projet
$nouveauProjet = new Projet();
//Crée les descriptions
$descriptionFr = new ProjetInt();
$descriptionEn = new ProjetInt();
//Associe le projet et les descriptions
$nouveauProjet->addDescription($descriptionFr);
$nouveauProjet->addDescription($descriptionEn);
$descriptionFr->setProjet($nouveauProjet);
$descriptionEn->setProjet($nouveauProjet);
//Formulaires pour la création d'un projet
$formulaire=$this->createForm(new ProjetType(), $nouveauProjet);
//On surveille le formulaire
$formulaire->handleRequest($request);
//Si le formulaire est valide
if($formulaire->isValid())
{
//Indique le bon code de langue pour les descriptions
$descriptionFr->setLangue('fr');
$descriptionEn->setLangue('en');
//Applique les modifications
$em=$this->getDoctrine()->getManager();
$em->persist($nouveauProjet);
$em->flush();
...
}
}
这只是一个细节,但它真的让我很烦。我真的想将我的语言设置为if($formulaire->isValid())之外的语言
【问题讨论】:
-
那你为什么不把字段类型隐藏呢?
->add('languague', 'hidden', ...) -
为什么你不在开头设置它:
$descriptionFr->setProjet($nouveauProjet)->setLanguage('fr'); -
对于第一条评论,如果我隐藏它,用户可以更改我的 css 并开始使用该语言。对于第二个,我不能在开始时设置它,因为如果我这样做,他将无法找到语言,因为我的字段设置为在我的树枝中呈现,但似乎这样做会使我表单不保存语言字段,这就是我设置它的原因。我不想以前怎么设置它。
标签: php forms symfony doctrine