管理生成器 - 使用不同的表单进行“编辑”和“新建”操作

时间:2010-11-24 10:57:27

标签: symfony1 symfony-1.4

如何配置generator.yml以便它将使用一个表单 “新”动作,以及另一个“编辑”动作?

4 个答案:

答案 0 :(得分:3)

两种方式:

<强> 1。编写自己的管理配置

如果两种形式之间存在显着差异,则这是首选方法。该文件位于模块的config文件夹中。 “moduleName”应替换为模块的名称。

class moduleNameGeneratorConfiguration extends BaseModuleNameGeneratorConfiguration
{ 
  public function getForm($object = null, $options = array())
  {
    $options = array_merge($this->getFormOptions(), $options);
    if ($object && $object->exists())
    {
      return new EditModelForm($object, $options);
    }
    else
    {
      return new NewModelForm($object, $options);          
    }
  }
}

<强> 2。将表格中的逻辑分开

如果存在显着差异,这可能会变得混乱,但您可以根据需要在表单内部调用isNew,例如。

public function configure()
{
  if ($this->isNew())
  {
    //do new stuff
  }
  else
  {
    //do edit stuff
  }
}

答案 1 :(得分:1)

我可以使用

以相同的形式在“新”和“编辑”中执行不同的操作
$this->isNew() 

答案 2 :(得分:0)

您可以创建与前端应用程序相同的目录结构,它将覆盖生成器表单。例如,在Backend模块中创建indexSuccess.php文件。加载该模块时,它将立即使用indexSuccess.php文件。

最简单的方法是从/ cache文件夹中复制数据 - 基本上复制生成的后端模块文件,并按照您想要的方式修改它们。

答案 3 :(得分:0)

您可以根据操作指定表单中可用的字段,请参阅The form section only exists as a fallback for the edit and new sections

例如:

generator:
  param:
      form: 
        display:
          group1:             [name, description]
      edit:
        title:                Edit item %%name%%
        fields: 
          #group1:             [name, description] -> inheritance 
          group2:             [only_displayed_when_editing_field]
      new:
        title:                New item
        fields:
          group1:             [name] #override