Domanda

Nella mia directory di sistema \ librerie CI ho una nuova classe chiamata DD_Controller.php. Questo file è simile al seguente:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class DD_Controller extends Controller 
{   
    protected $ddauthentication;


    function __construct()
    {           
        parent::Controller();
        $this->ddauthentication = "Authenticated";
    }
}
?>

Il mio controller dell'applicazione è definito in questo modo:

class Inquiry extends DD_Controller 
{...}

La classe Inquiry funziona perfettamente quando estendo il controller, ma ottengo un

  

Errore irreversibile: classe 'DD_Controller' no   trovato in   C: \ sviluppo \ localhost \ Applications \ inchiesta \ controller \ inquiry.php   sulla linea 4

Quando estendo DD_Controller. Nel file di configurazione ho il prefisso definito come tale:

$config['subclass_prefix'] = 'DD_';

Qualche idea su cosa mi manchi?

TIA

È stato utile?

Soluzione

DD_Controller.php dovrebbe essere in / system / application / libraries /

Se si utilizza lo stesso elemento della configurazione per più app e si desidera che tutti possano estendere i propri controller a quello personalizzato, è possibile estendere la classe Controller di base nello stesso file.

In system / libraries / Controller.php sotto la classe Controller:

class Mega_Controller extends Controller {
    function Mega_Controller()
    {
        parent::Controller();
        // anything you want to do in every controller, ye shall perform here.
    }
}

Quindi sarai in grado di farlo nei controller delle tue app:

class Home extends Mega_Controller {
    ....

Poiché la classe di controller estesa creata sarà disponibile. Penso che sia meglio che sovrascrivere il controller di base, ma funzionerebbe anche.

Altri suggerimenti

Questo è un approccio migliore. Procedi come segue:

  1. Vai alla seguente directory: your_ci_app / application / core / e crea un file php chiamato MY_Controller.php (questo file sarà dove risiederanno le tue principali classi principali )
  2. Apri questo il file che hai appena creato e aggiungi le tue classi multiple, in questo modo:

    class Admin_Parent extends CI_Controller {
        public function __construct() {
            parent::__construct();
        }
    
        public function test() {
            var_dump("from Admin_Parent");
        }
    }
    
    class User_Parent extends CI_Controller {
    
        public function __construct() {
            parent::__construct();
        }
    
        public function test(){
            var_dump("from User_Parent");
        }
    
    }
    
  3. Crea i tuoi controller per bambini in questa directory your_ci_app / application / controller / . Lo chiamerò adminchild.php

  4. Apri adminchild.php e crea il tuo codice controller, assicurati di estendere il nome della classe genitore, in questo modo:

    class Adminchild extends Admin_Parent {
    
        function __construct() {
            parent::__construct();
        }
    
        function test() {
            parent::test();
        }
    
    }
    

Consiglio di evitare " cracking " File core CodeIgniter. Utilizzare meglio le sue possibilità di estensione nativa e cercare di adattarsi a esse.

La stessa regola che consiglierei per qualsiasi libreria / CMS PHP. Questa regola ha alcuni motivi: - possibilità di eseguire l'aggiornamento quiclky senza prendere in considerazione migliaia di note su dove e come sono stati craccati nei file core; - portabilità; - possibilità di condividere il tuo codice - ad esempio, questo sarà utilizzabile sia da te che dai tuoi amici in caso di necessità, e li aiuterà a mantenere la loro biblioteca aggiornata, uguale a te.

In altre parole, questo è molto più professionale e ti paga in futuro per usabilità, portabilità e possibilità di aggiornamento dell'applicazione.

Per quanto riguarda la tua domanda personale ...

Per quanto mi riguarda, non c'è niente di male nel creare la propria libreria con tutto il necessario per estendere il Controller CodeIgniter nativo, quindi caricare questa libreria nel costruttore del Controller e il gioco è fatto. L'unica cosa per migliorare l'usabilità è dare un nome breve alla tua libreria.

In questo modo puoi persino dividere ciò di cui hai bisogno in diversi pezzi e metterlo in librerie separate: WebFeatures AdminFeatures ecc.

Quindi carichi le librerie necessarie nel costruttore del tuo controller e il gioco è fatto.

P.S. So che il modo proposto non si adatta a "giusto" OOP concept, ma allo stesso tempo non devi mai dimenticare l'integrità delle librerie utilizzate.

Tutto quanto sopra è solo un'altra visione della mia esperienza di 7 anni nello sviluppo web professionale, quindi spero che sarà utile se non seguirlo, almeno per tenerne conto.

Saluti, Anton

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top