मैं PHP ओओपी और कोडइग्निटर के लिए नया हूं और मुझे मदद चाहिए। मैं CodeIgniter 4 का उपयोग कर रहा हूं और बेसकंट्रोलर.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');
    }
}

लेकिन यह काम नहीं कर रहा है।

मैं क्या गलत कर रहा हूं?

-1
Šarūnas Indrulionis 28 फरवरी 2020, 15:35

3 जवाब

ऐसा इसलिए हो सकता है क्योंकि आपने बेसकंट्रोलर को Vartotojai कंट्रोलर तक नहीं बढ़ाया है।

वर्ग Vartotojai बेसकंट्रोलर का विस्तार करता है

कृपया यह प्रयास करें।

1
user575272 5 मार्च 2020, 15:28

बदलें नियंत्रक

class Vartotojai extends Controller
{

बेसकंट्रोलर . में

    class Vartotojai extends BaseController
1
Boominathan Elango 5 मार्च 2020, 15:33

कृपया ध्यान दें: जब भी आप प्रीलोडिंग (मॉडल, हेल्पर्स, लाइब्रेरी इत्यादि) कर रहे हों, तो आपको उस मॉडल का उपयोग करने वाले सभी नियंत्रकों पर बेसकंट्रोलर का विस्तार करना होगा। आपके मामले में आपने मॉडल को सही तरीके से प्रीलोड किया लेकिन आपने अपने नियंत्रक को विस्तारित नहीं किया आधार नियंत्रक। अपने नियंत्रकों में नीचे दिए गए प्रारूप का प्रयोग करें:

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

  class ClassName extends BaseController
  {
    //your functions and code
  }
?>
0
user8981779 6 अगस्त 2020, 02:12