我怎样才能在数据库中添加不同语言的属性

时间:2016-04-25 21:53:01

标签: php symfony model-view-controller

/ * controller_问题是总是为不同的语言添加一些属性* /

`

if ($request->isMethod('POST') && null !== ($request->request->get('ajouter')))` {

        $pack = new Packs();
        $pack->setPackPrice($request->request->get('pack_price'));
        $pack->setDataCreated(new \DateTime('now'));
        $pack->setDataStatus($request->request->get('data_status'));

        foreach ($listLanguages as $language) {
            $packLanguage = new Packs2lng();
            $packLanguage->setLanguage($language);
            $packLanguage->setPack($pack);


            $packLanguage->setPack2lngWording($request->request->get('pack_2lng_wording'));
            $packLanguage->setPack2lngDescription($request->request->get('pack_2lng_description'));

            $em->persist($packLanguage);


        }

// view_我认为我的输入请求必须是可变的

{% for i in listLanguages %}
            <div class="form-group">
             <label class="control-label col-md-3">Titre </label>
            <div class="col-md-4">
            <input type="text" name="pack_2lng_wording" data-required="1" class="form-control" value="{% if packLanguage.pack2lngWording is defined%}{{packLanguage.pack2lngWording}} {%endif%}"/>
     </div>
     </div>
     <div class="form-group">
    <label class="control-label col-md-3">Description </label>
    <textarea cols="60" rows="5" class="span4" name="pack_2lng_description">
        {% if packLanguage.pack2lngDescription is defined%}{{packLanguage.pack2lngDescription}} {%endif%}</textarea>
            </div>
            {%endfor%}

1 个答案:

答案 0 :(得分:0)

假设用户输入法语和英语翻译。使用您当前的视图,帖子请求将是:

  • pack_2lng_wording = foo_FR
  • pack_2lng_description = bar_FR
  • pack_2lng_wording = foo_EN
  • pack_2lng_description = bar_EN

这不起作用,因为第一个pack_2lng_wording会被第二个覆盖。

要阻止它,您必须将[]添加到name的{​​{1}}属性中:

input

或添加<input type="text" name="pack_2lng_wording[]" /> 以获取关联数组(假设每种语言都有语言代码,即ISO 639-1代码):

{{ i.code }}

这会导致这个帖子请求:

  • pack_2lng_wording [FR] = foo_FR
  • pack_2lng_wording [EN] = foo_EN
  • pack_2lng_description [FR] = bar_FR
  • pack_2lng_description [EN] = bar_EN

在您的控制器中,您必须添加<input type="text" name="pack_2lng_wording['{{ i.code }}']" />

[$language]
BTW:我强烈建议使用Symfony Forms。你现在正在重新发明轮子。如果你想学习,那就没关系,但是如果你使用的文档很好,维护得很好等,它会让你的生活变得更轻松(和你的应用程序)。