Pregunta

En mi directorio de sistema \ bibliotecas de CI tengo una nueva clase llamada DD_Controller.php. Este archivo tiene este aspecto:

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

class DD_Controller extends Controller 
{   
    protected $ddauthentication;


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

El controlador de mi aplicación se define así:

class Inquiry extends DD_Controller 
{...}

La clase de consulta funciona bien cuando extiendo el controlador, pero obtengo un

  

Error fatal: la clase 'DD_Controller' no   encontrado en   C: \ desarrollo \ localhost \ aplicaciones \ query \ controllers \ query.php   en la línea 4

Cuando extiendo DD_Controller. En el archivo de configuración tengo el prefijo definido como tal:

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

¿Alguna idea de lo que me falta?

TIA

¿Fue útil?

Solución

DD_Controller.php debe estar en / system / application / collections /

Si está utilizando el mismo CI para varias aplicaciones y desea que todas puedan extender sus controladores a su personalizado, puede extender la clase de Controlador base en el mismo archivo.

En system / bibliotecas / Controller.php debajo de la clase Controller:

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

Entonces podrá hacer esto en sus controladores de aplicaciones:

class Home extends Mega_Controller {
    ....

Dado que la clase de controlador extendido que creó estará disponible. Creo que esto es mejor que sobrescribir el controlador base, pero eso también funcionaría.

Otros consejos

Este es un mejor enfoque. Haz lo siguiente:

  1. Vaya al siguiente directorio: your_ci_app / application / core / y cree un archivo php llamado MY_Controller.php (este archivo será donde residirán sus principales clases principales )
  2. Abra esto el archivo que acaba de crear y agregue sus múltiples clases, así:

    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. Cree sus controladores secundarios en este directorio your_ci_app / application / controllers / . Lo llamaré adminchild.php

  4. Abra adminchild.php y cree su código de controlador, asegúrese de extender el nombre de la clase principal, así:

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

Recomiendo evitar las grietas " CodeIgniter archivos principales. Utilice mejor sus posibilidades de extensión nativas e intente encajar en ellas.

La misma regla que recomendaría para cualquier biblioteca PHP / CMS. Esta regla tiene algunas razones: - capacidad de actualización rápida sin takint en cuenta miles de notas dónde y cómo se descifró en los archivos principales; - portabilidad; - posibilidad de compartir su código; por ejemplo, tanto usted como sus amigos podrán utilizarlo en caso de necesidad, y les ayudará a mantener su biblioteca actualizada, igual que usted.

En otras palabras, esto es mucho más profesional y le paga en el futuro por su usabilidad, portabilidad y posibilidad de actualización de la aplicación.

Con respecto a su pregunta personal ...

En cuanto a mí, no hay nada malo en crear su propia biblioteca con todo lo que necesita para extender el Controlador CodeIgniter nativo, luego cargue esta biblioteca en el constructor del Controlador y listo. Lo único para mejorar la usabilidad es dar un nombre corto a su biblioteca.

De esta manera, incluso puede dividir lo que necesita en diferentes piezas y colocarlas en bibliotecas separadas: WebFeatures AdminFeatures etc.

Luego simplemente carga las bibliotecas necesarias en el constructor de su controlador y ya está.

P.S. Sé que la forma propuesta no encaja en "correcto" Concepto de OOP, pero al mismo tiempo nunca debe olvidarse de la integridad de las bibliotecas utilizadas.

Todo lo anterior es solo una vista más de mi experiencia de 7 años en desarrollo web profesional, por lo que espero que sea útil si no se sigue, al menos para tener en cuenta.

Saludos, Anton

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top