2016-01-31 21 views
0

我正在使用cakephp3。我想制作登录页面。会计数据库中表的名称是'用户'。1146表'Accounting.users'不存在Cake Database

这是我的代码:

<?php 
namespace App\Controller; 

use App\Controller\AppController; 

class UsersController extends AppController { 

public function login() { 

    if ($this->request->is('post')) { 
     $data = $this->request->data; 
     $cnt = $data->Users->find() 
       ->count(); 
     if ($cnt > 0) { 
      $this->redirect(['action' => 'index']); 
     } else { 
      $this->set('error', 'username or password is incorrct '); 
     } 
    } 
}} 

,这是Users.php

<?php 

namespace App\Model\Table; 

use Cake\ORM\Table; 

class UsersTable extends Table { 

} 

登录后在登录页面:

Error: Call to a member function find() on a non-object

在您看来,是什么问题。

+1

只要看看你指的是'Users'的变量。我建议使用具有适当代码检查功能的IDE来标记此类错误。另外CakePHP附带一个认证层,您应该使用它。 – ndm

回答

1

$data不是表格对象。

$data = $this->request->data; 
    $cnt = $data->Users->find() 

这很明显。

我强烈建议您花一些时间并了解调试技术以及如何解决这类问题和错误消息。开发人员应该能够在没有外部帮助的情况下很快解决这类问题。对于开发人员来说,这被认为是正常的日常工作。

1)阅读整个错误消息2)在谷歌和Stackoverflow上搜索它,它是非常不太可能没有人从未收到过此消息。 3)根据错误信息的原因采取行动。

在这个错误消息的情况下,调试你正在处理什么样的对象,并找出它为什么不是你期望它的对象。通过调用栈帮助。使用Xdebugs探查器,这是一个很棒的工具。

另外不要使用变量名称,如$cnt我假设这应该是“帐户”,它甚至不适合使用它的上下文。这是非常糟糕的名字。而应使用可读且适合上下文的适当变量名称。将变量名缩短是一种节省时间的做法是完全错误的假设 - 显然不是。接下来的人将需要一本字典或对这些变量的含义进行大量猜测。

+0

我从另一个正常工作的项目复制了这段代码。 –

+0

我从另一个正常工作的项目复制了这段代码。堆栈是任何问题的地方。无论如何感谢您的建议。 –

+1

复制并粘贴失败我会说。这*不能*工作,它*不*工作。这在技术上**是不可能的**,请求数组以某种方式奇迹般地变成了一个UsersTable对象... – burzum

0

而不是$ cnt = $ data-> Users-> find() - > count();使用$ cnt = $ this - > {$ this-> modelClass} - > find('count');

+0

'count'for find('count')给出错误。我不是这样把find() - > count()。但是对此,用户将被重定向到使用正确或错误密码的索引。 –

相关问题