php - una - Code Igniter 2: ¿Cómo extender CI_Controller varias veces?
llamar un controlador desde otro controlador laravel (4)
Esto es bastante fácil. Haz lo siguiente:
- Vaya al siguiente directorio:
your_ci_app/application/core/
y cree un archivo php llamadoMY_Controller.php
(este archivo será donde residan sus principales clases principales) Abra este 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 hijos bajo 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, de esta forma:class Adminchild extends Admin_Parent { function __construct() { parent::__construct(); } function test() { parent::test(); } }
He ampliado con éxito la clase CI_Controller creando un MY_Controller.php que he colocado en el directorio de la aplicación / núcleo.
core / My_Controller.php se ve más o menos así:
class MY_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
}
}
Entonces cuando creo controladores normales se ven algo como esto:
class Home extends MY_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->load->view(''home'');
}
}
Estoy creando un back-end de administrador y quiero tener una clase base diferente para que los controladores se extiendan en lugar de My_Controller. Esto es para que pueda tener métodos comunes para los controladores de administración (es decir, authentication_check, etc.)
Lo que no puedo resolver es cómo creo otro controlador que amplíe CI_Controller.
El objetivo es que los controladores administrativos extiendan una clase base diferente de los controladores frontales.
El controlador base de administrador se vería así:
class MY_Admin_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
}
}
Un controlador normal para las páginas de administración:
class Admin_home extends MY_Admin_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->load->view(''admin_home'');
}
}
El problema es que para extender la clase CI_Controller debe nombrar su archivo de controlador PREFIX_Controller.php y colocarlo en el núcleo / directorio. Pero quiero dos clases de controlador y no pueden tener el mismo nombre de archivo.
Lo que estás haciendo es correcto. Solo necesita todos estos archivos en el directorio de la application/core
. Aquí hay una publicación de Phil Sturgeon con respecto a esto:
http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY
http://philsturgeon.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY/
El truco es usar la __autoload()
, que Phil describe en su publicación.
Simplemente pones ambos en el mismo archivo, tengo un proyecto que es exactamente el mismo que este.
Solo tenemos el administrador y el controlador extendido normal en el archivo MY_Controller.php
, funciona bien.
El motivo principal de MY_Controller
u otros archivos extendidos es que CodeIgniter los inicie automáticamente al cargar el archivo base (ya sea biblioteca, ayuda, etc.), puede tener muchas clases en estos archivos.
Editar:
Ni siquiera necesita llamarlos MY_Admin_Controller
o MY_Controller
, tenemos Admin_Controller
y User_Controller
y Ajax_Controller
en el MY_Controller
File
si desea extender otra clase en lugar de CI_controller, debe incluir la clase objetivo. por ejemplo
include ''auth.php'';
class test extends Auth