Domanda

Ho class MY_Controller extends CI_Controller e logica comune per la grande sezione del profilo, in modo I'va cercato di creare class Profile extends MY_Controller con la logica comune per la sezione profilo e tutte le classi relative a questa sezione dovrebbe estende questa classe Profilo quanto ho capito bene, ma quando ho provato a creare class Index extends Profile ricevo un errore:

Fatal error: Class 'Profile' not found

CodeIgniter cerca di trovare questa classe in index.php che sto facendo funzionare.

Dove è il mio errore? O forse c'è anoter modo migliore per segnare logica comune?

È stato utile?

Soluzione

Immagino che tu hai messo il tuo mio_controllore in / applicazione / core, e impostare il prefisso nella configurazione. Sarei attenzione all'uso indice come un nome di classe però. Come funzione / metodo Codeigniter ha un comportamento dedicato.

Se poi si desidera estendere tale controller è necessario mettere le classi nello stesso file.

es. In / applicazione principale

/* start of php file */
class MY_Controller extends CI_Controller {
    public function __construct() {
       parent::__construct();
    }
...
}

class another_controller extends MY_Controller {
    public function __construct() {
       parent::__construct();
    }
...
}
/* end of php file */

/ application / controller

class foo extends MY_Controller {
    public function __construct() {
       parent::__construct();
    }
...
}

o

class bar extends another_controller {
    public function __construct() {
       parent::__construct();
    }
...
}

Altri suggerimenti

Ho trovato questa pagina su Google perché ho avuto lo stesso problema. Non l'ho fatto come le risposte elencate qui così ho creato la mia soluzione.

1) Inserite la vostra classe padre nella cartella core.

2) Inserire un commento include all'inizio di tutte le classi che includono la classe padre.

Quindi, un controller tipico potrebbe essere simile a questo:

<?php

require_once APPPATH . 'core/Your_Base_Class.php';
// must use require_once instead of include or you will get an error when loading 404 pages

class NormalController extends Your_Base_Class
{
    public function __construct()
    {
        parent::__construct();

        // authentication/permissions code, or whatever you want to put here
    }

    // your methods go here
}

La ragione per cui mi piace questa soluzione è, il punto di creare una classe genitore è quello di ridurre la ripetizione del codice. Quindi non mi piace l'altra risposta che ha suggerito di copia / incolla la classe padre in tutte le classi controller.

E 'possibile con Codeigniter 3. Proprio incluso il file genitore è sufficiente.

require_once(APPPATH."controllers/MyParentController.php");
class MyChildController extends MyParentController {
...

Tutte le classi che si sta estendendo dovrebbe vivere nella directory dell'applicazione / core così nel tuo caso sia mio_controllore e profilo dovrebbe vivere lì. Tutti i controllori "end point" vivranno in application / controller cartella

Aggiorna

I Stand corretto. classi estese dovrebbero vivere nello stesso file. @ Spettacoli risposta di Rooneyl come implementare

Dopo una lotta con la versione 3 e questo problema ho deciso che questo non era una cattiva soluzione ...

require_once BASEPATH.'core/Controller.php';
require_once APPPATH.'core/MYCI_Controller.php';

aggiungere questa seconda linea dove il primo esiste nel sistema / core / CodeIgniter.php

[Se non è troppo tardi, vi consiglio vivamente di php e / o CodeIgniter.]

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