Symfony:你如何在插件的模式中扭转“notnull:true”?

时间:2010-04-01 15:08:54

标签: symfony1 doctrine yaml

sfDoctrineGuardPlugin的sfGuardUser模型是这样定义的:

sfGuardUser:
  actAs: [Timestampable]
  columns:
    id:
      type: integer(4)
      primary: true
      autoincrement: true
    username:
      type: string(128)
      notnull: true
      unique: true

正如您所看到的,'username'具有“notnull:true”功能。现在我想要 创建一个不使用'用户名'但电子邮件的注册表单 用户的地址。

当用户想要注册时,会显示:

  

类sfGuardUser中的验证失败   1个字段有验证错误:   * 1验证器在用户名上失败(notnull)

有什么想法吗?

Javi

4 个答案:

答案 0 :(得分:1)

我最后用另一个描述“notnull:false”的模式覆盖模式。这可以从sf1.3开始。

答案 1 :(得分:1)

在symfony 1.4中,最终类生成到主lib目录,因此您可以在项目中修改它们。

因此,在lib / model / doctrine / sfDoctrineGuardPlugin / sfGuardUser.class.php文件中,您可以覆盖负责模型定义的setUp()方法:

class sfGuardUser extends PluginsfGuardUser
{
  public function setUp()
  {
    parent::setUp();

    $this->hasColumn('username', 'string', 128, array(
      'type' => 'string',
      'notnull' => false,
      'unique' => true,
      'length' => 128,
    ));  
  }
}

答案 2 :(得分:0)

某些插件架构字段可以在不进行代码调整的情况下轻松调整,而其他字段会抛出错误。

您可以尝试从架构中的用户名字段中删除“notnull:true”,但它可能会抛出错误(尚未尝试过)。在这种情况下,您可以调整插件代码(=头痛),或者确保始终将值保存到该字段,例如零。这样它永远不会为空。

答案 3 :(得分:0)

您可以通过以下方式修复lib/form/doctrine/sfGuardPlugin/sfGuardUserForm.class.php

class sfGuardUserForm extends PluginsfGuardUserForm
{
  protected function doUpdateObject($values)
  {
    $this->getObject()->set('username', $values['email']);

    parent::doUpdateObject($values);
  }
}