2009-10-26 14 views
10

En mi directorio CI system \ libraries tengo una nueva clase llamada DD_Controller.php. Este archivo es el siguiente:¿Cómo extiendo el código de la clase de controlador del encendedor?

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

class DD_Controller extends Controller 
{ 
    protected $ddauthentication; 


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

Mi controlador de aplicación se define así:

class Inquiry extends DD_Controller 
{...} 

La clase de mensaje funciona bien cuando extiendo controlador, pero me da un

Fatal error: Class 'DD_Controller' not found in C:\development\localhost\applications\inquiry\controllers\inquiry.php on line 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

Respuesta

4

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

Si está utilizando el mismo CI para múltiples aplicaciones, y quiere que todos sean capaces de extiende sus controladores a su medida personalizada, entonces puede ampliar la clase de Controlador base en el mismo archivo.

en el sistema de bibliotecas// controller.php por debajo de la clase controlador:

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

entonces usted será capaz de hacer esto en sus controladores de aplicaciones:

class Home extends Mega_Controller { 
    .... 

Desde la clase del controlador extendida tu creado estará disponible. Creo que esto es mejor que sobreescribir el controlador base, pero eso también funcionaría.

+0

que hace * trabajo * - Gracias. Pero no es lo que estamos buscando. Si estuviéramos en un entorno de aplicación única, su solución sería perfecta. Sin embargo, queremos que todas nuestras aplicaciones compartan el mismo controlador base primario. Si no se reemplaza el sistema/Controller.php, ¿se puede hacer esto? – ChronoFish

+0

LOL - Esta es exactamente la solución que se me ocurrió también. Parece tener el impacto más bajo: no hay cambio de código en el controlador, hay un cambio limitado en el archivo y está disponible en todas las aplicaciones. ¡Gracias por su ayuda! – ChronoFish

4

Recomiendo evitar "descifrar" archivos core de CodeIgniter. Mejor utilice sus posibilidades de extensión nativa e intente encajar en ellas.

La misma regla que recomendaría para cualquier biblioteca PHP/CMS. Esta regla tiene algunas razones: - posibilidad de actualizar rápidamente sin tener 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, usted y sus amigos lo podrán utilizar 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 la usabilidad, la portabilidad y la posibilidad de actualización de aplicaciones.

En cuanto a su pregunta personal ...

En cuanto a mí, no hay nada mal para crear su propia biblioteca con todo lo necesario para extender controlador CodeIgniter nativa, a continuación, cargar esta biblioteca en el constructor del controlador y ya está. Lo único que permite una mejor usabilidad es dar un nombre corto a tu biblioteca.

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

Luego solo carga las bibliotecas necesarias en el constructor de su controlador y listo.

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

Todo lo anterior es solo una visión más de la mía 7 años de experiencia en desarrollo web profesional, por lo que espero que sea útil si no lo sigo, al menos para tener en cuenta.

Saludos, Anton

5

Este es un mejor enfoque. Haga lo siguiente:

  1. Ir al siguiente directorio: your_ci_app/application/core/ y crear un archivo PHP llamado MY_Controller.php (este archivo será donde sus principales clases de padres residirán)
  2. Abrir el archivo que acaba de crear y añadir 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 de los niños en este directorio your_ci_app/application/controllers/. Lo llamaré adminchild.php

  4. abierto adminchild.php y crear su código del controlador, asegúrese de extender el nombre de la clase padre, así:

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