如何从另一个控制器Cakephp 3添加到表中

时间:2018-11-10 03:31:12

标签: cakephp-3.0

我是Cakephp3的新手。我想知道是否可以将新的输入表单controller1添加到table2。

这是一个登录表单。因此,我想首先验证用户是否已注册,然后在验证之后,将详细信息保存到另一个表中。

class UsersController extends AppController
{

    public function login()
    {
        $user = $this->Users->newEntity();
        if($this->request->is(['post']))
        {
            $user = $this->Auth->identify();
            if($user)
            {
                $logs = TableRegistry::get('AttendsTable');
                $log->username = 'lorem ipsum';
                $log->datenow = '2018-11-10';
                $log->tin = '12:42:00';
                $log->tout ='12:42:00';
                $logs->save($log);
                $this->Auth->setUser($user);
                $this->redirect(['action'=>'index']);
            }
        }
    }

我遇到错误:

  

“传递给Cake \ ORM \ Table :: save()的参数1必须实现接口Cake \ Datasource \ EntityInterface,给定的stdClass实例,在C:\ xampp \ htdocs \ TimeStamps \ src \ Controller \ UsersController.php中调用在第32行上

1 个答案:

答案 0 :(得分:0)

您的代码无法正常工作,因为Model->save()函数需要一个实体。在您的代码段中$log不是首先定义的,因此PHP只是使其成为stdClass(一定要喜欢高级编程:p)。

类似的事情应该起作用:

$logs = TableRegistry::get('AttendsTable');
$log = $logs->newEntity([
    'username' => 'lorem ipsum',
    'datenow' => '2018-11-10',
    // ...
]);

$logs->save($log);

此外,我听说最好使用$this->loadModel()而不是TableRegistry::get()

$this->loadModel('ExternalModel');

// Now available:
$this->ExternalModel->//...