【问题标题】:Cakephp3 : using another model in a controllerCakephp3:在控制器中使用另一个模型
【发布时间】:2016-08-30 00:40:32
【问题描述】:

我用 CakePHP3 启动了一个应用程序,我需要记录一些用户的操作。所以,我已经迁移了我的日志结构,我已经烘焙了我的控制器和模型,现在,我尝试在用户登录时获取日志。

我像这样更新了我的 UsersController:

namespace App\Controller;

use App\Controller\AppController;
use App\Model\Table\LogsTable;
use App\Model\Entity\User;
use App\Model\Entity\Log;

class UsersController extends AppController {

    public function login(){
      $this->viewBuilder()->layout('external');
      $user = $this->Users->newEntity();
      if($this->request->is('post')){
        $user = $this->Auth->identify();
        if($user){
          //DOING : enregistrement valide$log = new Log();
            $log->user_id = 1;
            $log->action = 'lorem ipsum';
            $log->target_user = 0;
            $log->target_object = 0;
            $log->comment = 'test';
            $logs = new LogsTable();
            $logs->save($log);

          $this->Auth->setUser($user);
          if($this->Auth->user('security') == 'admin'){
            return $this->redirect(['action' => 'admin_index']);
          }else{
            return $this->redirect($this->Auth->redirectUrl());
          }
        }
        //TODO : enregistrement faux
        $this->Flash->error(__('Email or password are wrong.'));
      }
      $this->set(compact('user'));
      $this->set('_serialize', ['user']);
    }

}

但它不起作用,我有 save() 的错误消息:

错误:在非对象上调用成员函数 transactional()

有什么想法吗?

【问题讨论】:

  • use App\Controller\AnotherController; 在控制器中,$this->save($log); 在控制器中和$logs = new LogsTable(); 在任何地方都是您在 CakePHP 中从未做过的 3 个示例。 “它不起作用”对读者没有帮助。在做任何其他事情之前,最好先查看一下文档,您目前遇到的问题级别非常基本,并且已在博客教程中介绍。
  • 在教程中,有使用外键链接到文章的类别。我想做的是不同的:这是连接到用户的日志。所以外键在 LogsTable 中。
  • What I want to do is different 你的场景是一样的,只是名字改变了。

标签: cakephp cakephp-3.0


【解决方案1】:

这边

use Cake\ORM\TableRegistry;

$logs = TableRegistry::get('LogsTable');
$logs->save($log);

more info

从 3.6 开始编辑你应该使用

use Cake\ORM\TableLocator

$articles = TableRegistry::getTableLocator()->get('Articles', [
    'className' => 'App\Custom\ArticlesTable',
    'table' => 'my_articles',
    'connection' => $connectionObject,
    'schema' => $schemaObject,
    'entityClass' => 'Custom\EntityClass',
    'eventManager' => $eventManager,
    'behaviors' => $behaviorRegistry
]);

more info here

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
相关资源
最近更新 更多