我已将另一个项目的完整代码移植到我的新项目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。
任何人都可以帮助这里或建议,什么可能是错的,或者我错过了什么?
好的,你已经从另一个项目移植了可能改变了应用程序流程的整个代码。你可以发布站点控制器登录操作吗? –
@RafayZiaMir在第二个代码示例中,上面的代码实际上是**,它是我的控制器的一部分,它的'actionLogin()'操作,正如我在上面解释的那样。这两个项目中的动作(原始的和移植的)都包含_完全相同的代码,就像在每个自动生成的Yii应用程序中一样,自从generation_以来一直未更改。除了提供的代码外,只有标准的AJAX回复('if(isset($ _ POST ['ajax'])'),标准登录表单处理('$ model-> validate()&& $ model-> login()')和登录表单渲染没有什么不寻常的东西生成只有流程/处理是奇怪的 – trejder
这个问题缩小到问题:为什么在Login模型创建时激发'Login :: login()'方法?原因是什么?登录用户后的逻辑,如果你没有登录(没有用户名和密码,'$ _POST'为空,没有数据提交,因为没有表单甚至呈现)。所以,这是一个侧面问题,很容易解决通过在数据库中添加'login'列或者重写'login()'和'authenticate()'方法(按计划),但问题仍然存在:_yy Yii在登录模型creation_时尝试登录用户?更多[Yii论坛](http://bit.ly/1i1UtjW)。 – trejder