首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CodeIgniter 4不会识别UserModel

CodeIgniter 4不会识别UserModel
EN

Stack Overflow用户
提问于 2021-04-16 15:20:07
回答 1查看 1.2K关注 0票数 1

我在Windows 10上使用CodeIgniter 4,我遇到了一个CI不承认我的模型的问题。

本人在递交表格时,会收到以下错误:

错误 未找到类“CodeIgniter\Models\UserModel” APPPATH\Controllers\User.php在第42行

CI将这一行(在User.php中)显示为问题的来源:

$model =新的UserModel();

下面是我的用户控制器文件(app/ controller /User.php):

代码语言:javascript
复制
<?php

namespace App\Controllers;

use CodeIgniter\Controller;
use CodeIgniter\Models\UserModel;

class User extends Controller {
    public function index() {
      return redirect()->to('/user/signin');
    }

    public function signin() {
      $data = [];
      helper(['form']);

      echo view('templates/dashkit/head');
      echo view('templates/dashkit/signin', $data);
      echo view('templates/dashkit/foot');

      return;
    }

    public function register() {
      $data = [];
      helper(['form']);

      if($this->request->getMethod() == 'post') {
        $rules = [
          'company' => 'required|min_length[8]|is_unique[users.user_company]',
          'email' => 'required|min_length[11]|max_length[255]|valid_email|is_unique[users.user_email]',
          'firstname' => 'required|min_length[2]|max_length[50]',
          'lastname' => 'required|min_length[2]|max_length[50]',
          'password' => 'min_length[8]|max_length[255]',
          'password_confirm' => 'matches[password]',
        ];

        if(!$this->validate($rules)) {
          $data['validation'] = $this->validator;
        } else {
          // If the information passes validation, add the user to the database
          $model = new UserModel();

          $newData = [
            'company'   => $this->request->getVar('company'),
            'email'     => $this->request->getVar('email'),
            'firstname' => $this->request->getVar('firstname'),
            'lastname'  => $this->request->getVar('lastname'),
            'password'  => $this->request->getVar('password')
          ];
          $model->save($newData);
          $session = session();
          $session->setFlashdata('success', 'The form was successfully submitted.');
          return redirect()->to('/dashboard');
        }
      }

      echo view('templates/dashkit/head');
      echo view('templates/dashkit/register', $data);
      echo view('templates/dashkit/foot');

      return;
    }
}

下面是我的UserModel文件(app/Models/UserModel.php):

代码语言:javascript
复制
<?php

namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model {
  protected $allowedFields = ['user_company', 'user_created_at', 'user_email', 'user_firstname', 'user_lastname', 'user_password'];
  protected $beforeInsert = ['beforeInsert'];
  protected $beforeUpdate = ['beforeUpdate'];
  protected $createdField  = 'created_at';
  protected $table = 'users';

  protected function beforeInsert(array $data) {
    if(isset($data['data']['password'])) {
      $data['data']['password'] = password_hash($data['data']['password'], PASSWORD_DEFAULT);
    }

    return $data;
  }

  protected function beforeUpdate(array $data) {


    return $data;
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-16 16:53:04

首先,您需要遵循名称空间规则,就像在文档中一样

代码语言:javascript
复制
namespace App\Controllers;   

use App\Models\NewsModel;    // App instead of CodeIgniter
use CodeIgniter\Controller;

其次,您因此收到的错误(如您的注释中所提到的):

CodeIgniter\Database\Exception\DataException“没有要插入的数据”。

是因为$model->save($newData);没有主键集而导致的。

请参阅保存数据

save():这是一个围绕insert()和update()方法的包装器,这些方法根据是否找到与$primaryKey值匹配的数组键来自动处理插入或更新记录

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67127936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档