¿Cómo extiendo la clase de controlador de encendedor de código?
-
06-07-2019 - |
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
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:
- Vaya al siguiente directorio:
your_ci_app / application / core /
y cree un archivo php llamadoMY_Controller.php
(este archivo será donde residirán sus principales clases principales ) -
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"); } }
-
Cree sus controladores secundarios en este directorio
your_ci_app / application / controllers /
. Lo llamaréadminchild.php
-
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