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
答案 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);
}
}