Symfony的:你将如何扭转“NOTNULL:真正的”在一个插件的架构?(Symfony: how

2019-10-30 11:17发布

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

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

正如你所看到的“用户名”具有如下特征:“NOTNULL:真”。 现在我想创建不使用“用户名”,但用户的电子邮件地址的登记表。

当用户想登录,它表明这一点:

验证类sfGuardUser失败1场有验证错误:未能在用户名* 1验证(NOTNULL)

任何想法?

告诉

Answer 1:

我最后用另一种模式,说:“:假NOTNULL”覆盖模式。 这可能是从sf1.3。



Answer 2:

在symfony的1.4 final类生成主lib目录,所以你可以在项目进行修改。

因此,在LIB /模型/教义/ sfDoctrineGuardPlugin / sfGuardUser.class.php文件,你都能够覆盖设置()方法负责模型定义:

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

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


Answer 3:

一些插件架构字段的是没有代码的调整容易调整,而另一些则抛出一个错误。

你可以尝试删除“NOTNULL:真正的”从用户名字段中的模式,但它可能会引发错误(没试过)。 在这种情况下,可以其一是调节插件代码(=头痛),或者确保值总是保存到该字段中,例如零。 这种方式是从来没有空。



Answer 4:

你能解决lib/form/doctrine/sfGuardPlugin/sfGuardUserForm.class.php以下列方式:

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

    parent::doUpdateObject($values);
  }
}


文章来源: Symfony: how would you reverse the “notnull:true” in a schema of a plugin?