Bibliotecas de Codeigniter: error al cargar clases personalizadas

No puedo cargar mi clase personalizada que no es se extienden desde cualquier clase principal. He colocado mi clase personalizada en una subcarpeta dentro de la aplicación / bibliotecas.

Así que aquí está la estructura de mi carpeta

application
    |_ libraries
      |_ cgh
          |_ cgh_asset.php
          |_ cgh_article.php
          |_ cgh_asettype.php
    |_ controllers
      |_ welcome.php

La clase Cgh_article es una subclase de Cgh_asset

Cgh_asset.php:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 
abstract class Cgh_asset
{
    public $id;
    public $type;
    public $title;
    public $content;
    public $user;

    abstract public function generate_url();
    function __construct()
    {
        $this->generate_url();
    }
}

?> 

Cgh_article.php:

<?php

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

class Cgh_article extends Cgh_asset
{
    function __construct()
    {
        parent::__construct();
        $this->type=Cgh_assettype::article;
    }
    function generate_url()
    {
        $this->url="Article_URL";
    }
}


?> 

Cgh_tipodeactivo.php:

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

class Cgh_assettype
{
    const type1="type1";
    const type2="type2";
    const article="article";
}

?> 

Controlador welcome.php

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

class Welcome extends CI_Controller {

    public function index()
    {
        $this->load->library('cgh/Cgh_assettype','cgh/Cgh_asset','cgh/Cgh_article');

        $this->load->view('welcome_message');
    }
} 

El error que obtengo es: No se puede cargar la clase solicitada: Cgh_assettype

Debo haber probado todas las combinaciones posibles de mayúsculas y minúsculas de nombres de clases, nombres de archivos, pero el error es siempre el mismo.


Después de revisar algunas respuestas, creo que probablemente debería agregar una pregunta básica aquí: ¿es posible tener mis propios tipos de objetos personalizados dentro de codeigniter ... tipos que deberían ser bastante obvios a partir de mi pregunta?


Esto parece funcionar para mí, así que esto es lo que haré ... al menos hasta que algo se rompa:

En el constructor de mi controlador, uso require_once para mis clases ... y lo bueno es que puedo combinar todas mis clases en un solo archivo - mis clases inicialmente estaban en un solo archivo de todos modos - Este es mi controlador después de los cambios , y esto funciona:

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

class Welcome extends CI_Controller {


    public $cgh_assettype;
    public $cgh_asset;
    public $cgh_article;

    function __construct()
    {
        parent::__construct();
        //$this->load->library(array('cgh/cgh_assettype','cgh/cgh_asset','cgh/cgh_article'));
        echo "Including CGH<br />";
        echo "<p>Apppath is ". APPPATH. "</p>";
        require_once(APPPATH.'libraries/cgh/Cgh_assettype.php');
        require_once(APPPATH.'libraries/cgh/Cgh_asset.php');
        require_once(APPPATH.'libraries/cgh/Cgh_article.php');

    }

    public function index()
    {
        $iCgh_article=new Cgh_article();
        echo "<p>$iCgh_article->url</p>";
        $this->load->view('welcome_message');
    }
}

preguntado el 15 de septiembre de 11 a las 17:09

¿Ha intentado poner en minúsculas los nombres de archivo y cargar una matriz de bibliotecas; $this->load->library(array('cgh/cgh_assettype','cgh/cgh_asset','cgh/cgh_article'));? -

Probé todas las combinaciones posibles de versiones en minúsculas y mayúsculas de nombres de clases, nombres de archivos. No funciona. Intenté eliminar el prefijo Cgh_ de los nombres de clase, nombres de archivo. No funciona. Intenté mover mis archivos de clase a la raíz de la aplicación / bibliotecas. No funciona. Actualmente estoy intentando require_once (APPPATH.'libraries / cgh / Cgh_assettype.php '); en index.php -

Por cierto, estás intentando cargar cgh_assettype pero su archivo se llama cgh_asettype.php, ¿lo comprobaste? -

¡Ojalá fuera así, Burak! La estructura de carpetas en esta pregunta fue simplemente escrita por mí, y eso fue un error tipográfico ... Pero muchas gracias por el consejo ... Volví a verificar todos los nombres de archivo. -

3 Respuestas

Necesitas llamar $this->load->library para cada biblioteca.

$this->load->library('cgh/Cgh_assettype');
$this->load->library('cgh/Cgh_asset');
$this->load->library('cgh/Cgh_article');

$this->load->library toma 3 parámetros.

  1. Archivo para cargar
  2. (opcional) $config matriz
  3. (opcional) Cadena para cambiar el nombre de la biblioteca a ($this->Renamed_library)

Si desea cargar varias bibliotecas en una línea, use una matriz como primer parámetro.

$this->load->library(array('cgh/Cgh_assettype','cgh/Cgh_asset','cgh/Cgh_article'));

Respondido el 15 de Septiembre de 11 a las 22:09

Gracias Rocket. Pero lo intenté, no funcionó. Incluso si cargo solo una de las clases, digo $ this-> load-> library ('cgh / Cgh_assettype'); da un error para Cgh_assettype - Sindhu

Tal vez a CodeIgniter no le guste el Cgh_ ¿prefijo? Intenta eliminar eso. - Cohete Hazmat

Desafortunadamente, eso tampoco funciona. Otra cosa que intenté fue mover estos archivos de clase de la carpeta cgh a la raíz de las bibliotecas. Aún así el error permanece ... - Sindhu

¿Los nombres de los archivos de su biblioteca están en mayúsculas? (La estructura de su carpeta enviada dice que no lo son).

No sé si hay bibliotecas dentro de los subdirectorios, pero sé que los nombres de los archivos deben escribirse en mayúscula.

http://codeigniter.com/user_guide/general/creating_libraries.html

Convenciones de nombres

  • Los nombres de los archivos deben estar en mayúscula. Por ejemplo: Myclass.php
  • Las declaraciones de clase deben estar en mayúscula. Por ejemplo: clase Myclass
  • Los nombres de las clases y los nombres de los archivos deben coincidir.

Respondido el 31 de diciembre de 13 a las 03:12

Debe cargar la biblioteca o lo que sea solo una vez. Si está cargando por segunda vez, obtiene ese error.

Respondido el 03 de diciembre de 13 a las 12:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.