【问题标题】:How could i add attribute in database with different languages如何在数据库中添加不同语言的属性
【发布时间】:2016-04-25 21:53:00
【问题描述】:

/*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%}

【问题讨论】:

  • 对不起,我不知道你想做什么。你想要什么,你之前尝试过什么,你的问题到底是什么?
  • 我正在尝试使用不同的语言添加该属性
  • 你有什么问题?你已经尝试过什么?为什么不使用 Symfony 表单?
  • 我发表了我的观点,我一直在寻找不使用捆绑包的解决方案。
  • 我认为我需要在视图变量中创建 name="pack_2lng_description" 和控制器 $request->request->get('pack_2lng_wording') 的一些解决方案,但如何?跨度>

标签: php symfony model-view-controller


【解决方案1】:

假设用户输入了法语和英语翻译。根据您当前的观点,发布请求将是这样的:

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

这行不通,因为第一个 pack_2lng_wording 会被第二个覆盖。

为了防止这种情况,您必须将[] 添加到inputname 属性中:

<input type="text" name="pack_2lng_wording[]" />

或者添加{{ i.code }}得到一个关联数组(假设每种语言都有一个语言代码,即一个ISO 639-1代码):

<input type="text" name="pack_2lng_wording['{{ 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

在你的控制器中你必须添加[$language]:

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

     $packLanguage->setPack2lngWording($request->request->get('pack_2lng_wording')[$language->getCode()]);
     $packLanguage->setPack2lngDescription($request->request->get('pack_2lng_description')[$language->getCode()]);
}

顺便说一句:我强烈推荐使用 Symfony Forms。你现在正在重新发明轮子。如果您想学习,那没关系,但如果您使用文档齐全、维护良好等的组件,它会让您的生活(和您的应用程序)更轻松。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多