2014-03-03 108 views
2

我已将另一个项目的完整代码移植到我的新项目Yii 1.1.12。它原来的一个,任何工作都很好。登录模式尝试登录用户而不是显示登录表格

在我的新项目中(尽管我没有在登录区域触及任何内容)尝试显示登录表单(或请求任何要求用户登录的操作)以Login模型尝试实际登录用户结束。

当我请求任何操作时,需要登录,Yii“内部”将我重定向到我的主要site控制器的actionLogin。在我site控制器

CDbException: CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'login' in 'where clause'. The SQL statement executed was: SELECT * FROM `users` `t` WHERE LOWER(login)=? LIMIT 1 

一些内部测试证明,我loginAction()是第一行:但是,而不是被渲染的登录表单,我发现了一个有点奇怪的异常

if(Yii::app()->user->isGuest) 
{ 
    $model = new Login; 
    ... 
} 

导致实际尝试登录用户。有没有人有任何想法,这里发生了什么?

我从来没有遇到的情况,在任何我的Yii项目,即Login模型的建立实际上是试图登录的用户,当$_POST是空的(没有形式不断呈现,所以没有POST数据是以往任何时候提交)和当用户代码不执行时$model->login()

编辑:这是一个标准的Yii方法(虽然仍然神秘的对我来说),所以我问这个another question

任何人都可以帮助这里或建议,什么可能是错的,或者我错过了什么?

+0

好的,你已经从另一个项目移植了可能改变了应用程序流程的整个代码。你可以发布站点控制器登录操作吗? –

+0

@RafayZiaMir在第二个代码示例中,上面的代码实际上是**,它是我的控制器的一部分,它的'actionLogin()'操作,正如我在上面解释的那样。这两个项目中的动作(原始的和移植的)都包含_完全相同的代码,就像在每个自动生成的Yii应用程序中一样,自从generation_以来一直未更改。除了提供的代码外,只有标准的AJAX回复('if(isset($ _ POST ['ajax'])'),标准登录表单处理('$ model-> validate()&& $ model-> login()')和登录表单渲染没有什么不寻常的东西生成只有流程/处理是奇怪的 – trejder

+0

这个问题缩小到问题:为什么在Login模型创建时激发'Login :: login()'方法?原因是什么?登录用户后的逻辑,如果你没有登录(没有用户名和密码,'$ _POST'为空,没有数据提交,因为没有表单甚至呈现)。所以,这是一个侧面问题,很容易解决通过在数据库中添加'login'列或者重写'login()'和'authenticate()'方法(按计划),但问题仍然存在:_yy Yii在登录模型creation_时尝试登录用户?更多[Yii论坛](http://bit.ly/1i1UtjW)。 – trejder

回答

0

由于我的模型的NameLogin,所以在其中定义了login()方法,它作为PHP的构造函数。

这与Yii没有任何关系,这是一个基本的PHP行为,从旧的,不好的PHP4继承而来,仅在名称空间类的情况下从PHP 5.3.3开始。当类定义不使用名称空间时,此行为(将构造函数定义为函数的方式与类相同)仍然有效。

有关更多详细信息,请参阅this answer或参阅PHP手册。