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)
任何想法?
告诉
我最后用另一种模式,说:“:假NOTNULL”覆盖模式。 这可能是从sf1.3。
在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,
));
}
}
一些插件架构字段的是没有代码的调整容易调整,而另一些则抛出一个错误。
你可以尝试删除“NOTNULL:真正的”从用户名字段中的模式,但它可能会引发错误(没试过)。 在这种情况下,可以其一是调节插件代码(=头痛),或者确保值总是保存到该字段中,例如零。 这种方式是从来没有空。
你能解决lib/form/doctrine/sfGuardPlugin/sfGuardUserForm.class.php
以下列方式:
class sfGuardUserForm extends PluginsfGuardUserForm
{
protected function doUpdateObject($values)
{
$this->getObject()->set('username', $values['email']);
parent::doUpdateObject($values);
}
}