php - 使用 Zend_Form 生成动态输入

标签 php zend-framework doctrine-orm zend-form

早上好

我有一个必须支持 n 的多语言后端应用程序语言。 这些语言存储在数据库中,可以随时添加。 现在对于我的后端功能,我需要动态生成 <input>基于存储在我的数据库中的语言的字段,例如:

  1. German: <input type="text" id="title_de">
  2. English <input type="text" id="title_en">
  3. Italian <input type="text" id="title_it">
  4. ...

我目前使用 Zend_Form 像这样添加它们:

  foreach($languages as $language){
    $title = new Zend_Form_Element_Text("title_" . $language->getPrefix());
    $title->setLabel("Title " . $language->getPrefix())
      ->setRequired(true)
    $this->addElements(array($title));
  }

这就是我使用 Doctrine 将字段保存到我的数据库的方式:

//get language-dependent title and write to DB
  foreach($languages as $language){
    $title->setLanguage($language);
    $title->setContent($form->getValue("title_" . $language->getPrefix()));
    $touristArea->addTitle($title);

    //persist and flush
    $em->persist($touristArea);
    $em->flush();            
  } 

无论如何,由于我有许多依赖于语言的字段(标题、说明等),处理表单的代码可能会变得非常糟糕,而且我总是必须查询数据库中的语言表才能知道输入有哪些被生成。 有一个更好的方法吗?比如输入数组之类的?感谢您的任何输入:)

最佳答案

我建议你使用 Zend_Translate 组件 首先创建带有翻译的源文件-> 创建数组源文件

数组源文件是普通数组。但是你必须手动定义它们,因为没有工具可以帮助它。但因为它们非常简单,所以如果您的代码按预期工作,它是查找消息的最快方法。它通常是开始翻译业务的最佳适配器。

$english = array(
    'message1' => 'message1',
    'message2' => 'message2',
    'message3' => 'message3');

$german = array(
    'message1' => 'Nachricht1',
    'message2' => 'Nachricht2',
    'message3' => 'Nachricht3');

$translate = new Zend_Translate(
    array(
        'adapter' => 'array',
        'content' => $english,
        'locale'  => 'en'
    )
);

$translate->addTranslation(array('content' => $german, 'locale' => 'de'));

从 1.5 版开始,还支持在外部文件中包含数组。您只需提供文件名,Zend_Translate 将自动包含它并查找数组。见下文page有关源文件的更多信息

然后看一下Internationalization of Zend_Form

为了在表单中初始化 I18n,您将需要一个 Zend_Translate 对象或一个 Zend_Translate_Adapter 对象,详见 Zend_Translate 文档。有了翻译对象后,您可以使用 setTranslator() 方法将翻译器附加到特定表单实例或特定元素:

// Tell *this* form instance to use a specific translate adapter; it
// will also be used to translate validation error messages for all
// elements:
$form->setTranslator($translate);

// Tell *this* element to use a specific translate adapter; it will
// also be used to translate validation error messages for this
// particular element:
$element->setTranslator($translate);

详细指南是here

关于php - 使用 Zend_Form 生成动态输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12526206/

相关文章:

symfony - Doctrine2迁移-单表继承-父id不存在

symfony - Doctrine 中的 Dql 选择 vs sql 查询

php - if(!isset($_SESSION ['username' ])) 导致用户从 verify_login_form.php 重定向回 index.php

php - 原则 2 HasLifecycleCallbacks

javascript - 在 Wordpress 中使用 requireJS

mysql - 使用 zend 函数从表中获取不同的记录?

zend-framework - Zend_Validate_Float 语言环境不适用于 hi_IN 语言环境

php - Zend MVC::如何将javascript文件+ javascript代码插入到部分头部或正文区域?

php - 数据库连接字符串未在 php 函数中传递

php - 如何对标准输入中的每一行执行 PHP 函数?