访问symfony 1.4中的扩展类

时间:2012-07-11 10:07:52

标签: php symfony-1.4 propel sfguard

所以...我基本上遵循practical symfony book,遇到了以下问题。 我已经正确(我猜)安装了sfGuardPlugin,构建了模型,sqls等,创建了用户并尝试使用输入的用户名和密码登录。

我收到以下错误消息:

  

Fatal error: Call to undefined method sfGuardUserPeer::retrieveByUsername() in /***/plugins/sfGuardPlugin/lib/validator/sfGuardValidatorUser.class.php on line 53

对我来说这看起来很奇怪,因为sfGuardValidatorUser类的问题部分看起来像这样:

// user exists?
if ($user = sfGuardUserPeer::retrieveByUsername($username))
{
  // password is ok?
  if ($user->getIsActive() && $user->checkPassword($password))
  {
    return array_merge($values, array('user' => $user));
  }
}

而sfGuardUserPeer只有空类:

class sfGuardUserPeer extends PluginsfGuardUserPeer
{
}

扩展了PluginsfGuardUserPeer,所以我也检查了它:

class PluginsfGuardUserPeer extends BasesfGuardUserPeer
{
  public static function retrieveByUsername($username, $isActive = true)
  {
    $c = new Criteria();
    $c->add(self::USERNAME, $username);
    $c->add(self::IS_ACTIVE, $isActive);

    return self::doSelectOne($c);
  }

}

这是缺少的功能!

所以 - 出了什么问题?为什么不起作用? 我已经尝试过使用谷歌找到的所有解决方案,但它们都不起作用:/

2 个答案:

答案 0 :(得分:1)

终于找到了它!

symfony propel:build-model

任务从插件目录中的模式文件中不必要地生成了模型目录中的sfGuard类,而所有类都已存在于sfGuard文件夹中。

geez,这不应该发生在如此完善的框架和插件中......

答案 1 :(得分:1)

简单地说就是

public static function retrieveByUsername($username, $isActive = true)
  {
    $c = new Criteria();
    $c->add(self::USERNAME, $username);
    $c->add(self::IS_ACTIVE, $isActive);

    return self::doSelectOne($c);
  } 

代码进入sfGuardUserPeer课程,这将解决问题,当我收到此错误时我做了同样的事情,它对我有用..