-1

我是 PHP OOP 和 CodeIgniter 的新手,我需要帮助。我正在使用 CodeIgniter 4 并尝试在 BaseController.php 中预加载模型 logas_model:

<?php

namespace App\Controllers;

/**
 * Class BaseController
 *
 * BaseController provides a convenient place for loading components
 * and performing functions that are needed by all your controllers.
 * Extend this class in any new controllers:
 *     class Home extends BaseController
 *
 * For security be sure to declare any new methods as protected or private.
 *
 * @package CodeIgniter
 */

use App\Models\Admin\logas_model;
use CodeIgniter\Controller;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;

class BaseController extends Controller
{

    /**
     * An array of helpers to be loaded automatically upon
     * class instantiation. These helpers will be available
     * to all other controllers that extend BaseController.
     *
     * @var array
     */
    protected $helpers = ['form', 'session', 'html', 'number'];
    protected $logas;

    /**
     * Constructor.
     */
    public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
    {
        // Do Not Edit This Line
        parent::initController($request, $response, $logger);

        //--------------------------------------------------------------------
        // Preload any models, libraries, etc, here.
        //--------------------------------------------------------------------
        ///$this->session = \Config\Services::session();
        $this->logas = new logas_model();
    }

}

模型 logas_model 代码:

<?php namespace App\Models\Admin;

use CodeIgniter\Model;
use Config\Services;

class logas_model extends Model
{
    protected $table = 'veiksmai_logs';
    protected $primaryKey = 'id';

    protected $returnType = 'array';
    protected $useSoftDeletes = true;

    protected $useTimestamps = TRUE;
    protected $createdField = 'created_at';
    protected $updatedField = 'updated_at';
    protected $deletedField = 'deleted_at';

    protected $allowedFields = ['uid', 'veiksmas'];

    public function get_all_veiksmai()
    {
        return $this->select("CONCAT(`user`.`vardas`, ' ', `user`.`pavarde`) AS `user_vardas_pavarde`, `veiksmai_logs`.`veiksmas`, `veiksmai_logs`.`created_at`, `veiksmai_logs`.`id`")
            ->join('user', 'user.id = veiksmai_logs.uid')
            ->orderBy("`veiksmai_logs`.`created_at`", 'DESC')
            ->findAll();
    }

    public function add_veiksmas($veiksmas)
    {
        $session = Services::session()->get();

        $data = [
            'uid' => $session['uid'],
            'veiksmas' => $veiksmas
        ];
        return $this->insert($data);
    }
}

然后,在扩展控制器的其他控制器中,我试图通过使用它的功能来使用该预加载模型:

$this->logas->add_veiksmas('Created User.');

完整的控制器代码:

<?php namespace App\Controllers\Admin;

use App\Models\Admin\vartotojai_model;
use CodeIgniter\Controller;

class Vartotojai extends Controller
{
    private $vartotojai;

    public function __construct()
    {
        $this->vartotojai = new vartotojai_model();
    }

    public function index()
    {

        $this->logas->add_veiksmas('Created User.');

        $this->data['vartotojai'] = $this->vartotojai->get_all_vartotojai();
        echo view('templates/Admin/Header', ['title' => 'Vartotojai']);
        echo view('Admin/Vartotojai/Index', $this->data);
        echo view('templates/Admin/Footer');
    }
}

但它不起作用。

我究竟做错了什么?

4

3 回答 3

1

更改控制器

class Vartotojai extends Controller
{

进入BaseController

    class Vartotojai extends BaseController
于 2020-03-05T12:33:03.810 回答
1

那可能是因为您没有将 BaseController 扩展到 Vartotojai 控制器。

Vartotojai 类扩展 BaseController

请试试这个。

于 2020-03-05T12:28:04.707 回答
0

请注意:每当您预加载(模型、助手、库等)时,您需要在将使用该模型的所有控制器上扩展 BaseController。在您的情况下,您正确地预加载了模型,但您没有将控制器扩展到基本控制器。在您的控制器中使用以下格式:

<?php
  namespace App\Controllers;
  use CodeIgniter\Controller;

  class ClassName extends BaseController
  {
    //your functions and code
  }
?>
于 2020-08-05T23:12:26.570 回答