2012-07-11 56 views
0

所以...我基本上按照practical symfony book,遇到了下面的问题。 我正确地(我猜)安装了sfGuardPlugin,建立了模型,sqls等,创建了用户并试图用输入的用户名和密码登录。在symfony 1.4中访问扩展类

我得到了以下错误消息:

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

} 

这就是失踪的功能!

那么 - 什么是错的?为什么它不起作用? 我已经尝试了所有与谷歌解决方案,但没有一个工作:/

+0

我想你已经清除你的缓存?重建所有lib等。? – j0k 2012-07-11 10:22:18

+0

显然我这样做...清除缓存与symfony cc,以及手动删除文件夹 – khartvin 2012-07-11 10:29:43

+1

也许有两个sfGuardUserPeer类。尝试在所有代码中搜索“class sfGuardUserPeer”。确保你正在向一个正确的方向发展(也可以反序列化搜索类文件路径的cache/project_autoload.cache文件)。 – glerendegui 2012-07-11 18:54:44

回答

1

终于找到它了!

symfony propel:build-model 

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

吉兹,不应该在这样一个发达的框架和插件的发生......

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类,这将整理出来的问题,我做了同样的,当我得到这个错误,它为我工作..