2010-06-14 9 views
5

Tengo una lista de constantes (las estoy usando como una enumeración), algunas son sentencias de definición, y algunas son solo variables globales.¿Dónde pongo el archivo de constantes para Codeigniter (PHP)?

¿Dónde se supone que debo ponerlos en el marco de MVC para poder usarlos tanto para mi modelo como para mi controlador que necesita referenciarlo?

Prefiero no pegarlo en config/constants.php ya que no deberían llamarse excepto por este modelo y los controladores que lo usan.

Edición 1: Aclaración

Para ser más específico, tengo mi modelo message_model y tiene un montón de constantes que necesito que se almacenan en message_model_constants.php. ¿Dónde debería poner message_model_constants.php y hay una manera de que el controlador que carga message_model cuando message_model no esté (y no lo quiera) automáticamente incluido en la carga automática?

Edición 2:

Realmente no quieren tener las constantes cargado de auto-a excepción de cuando se utiliza el modelo

Respuesta

2

extendiéndose respuesta Brennan Novak, se puede simplificar el código al cargar el archivo de configuración en el modelo de constructor. De esta forma, solo tiene que cargar el modelo en sus controladores y todo lo demás se hace automáticamente.

Modelo

class Message_model extends Model { 

    function __construct() 
    { 
     parent::Model(); 
     $this->load->config('message_model_constants'); 
    } 
... 
} 

controlador

class Some_controller extends Controller { 

    function __construct() 
    { 
     parent::Controller(); 
     $this->load->model('message_model'); 
    } 
... 
} 

Como ya se ha dicho, los archivos de configuración deben ser application/config/message_model_constants.php

1

Para configuraciones globales, agregar a la config/config.php o crear una config/application.php y luego cargue la configuración, luego el artículo.

$this->config->load('application'); // or autoload this - $autoload['config'] = array('application'); 
$this->config->item('item name'); 
3

Puede cargar un archivo de configuración particular cuando carga un modelo en particular en el controlador. Por ejemplo, en el archivo:

application/controllers/messages.php 

que utilizaría una línea como esta:

$this->config->load('messages'); 

Si se incluye en la parte superior de su controlador como este

function __construct() { 
    $this->config->load('messages'); 
    $this->load->model('message_model'); 
} 

Entonces todos esas constantes estarán disponibles para todas las funciones y métodos en el controlador dado. A continuación, llama a cada configuración constante como:

$this->config->item('item name') 

Y puede nombrar $ variables protegidas; en la construcción también para una sintaxis más corta.

Si está utilizando estas constantes de configuración y el modelo de mensaje en varios controladores diferentes, puede hacer un archivo "Biblioteca" que luego carga tanto la configuración como el modelo y declara allí todas las variables.

0

¿Ha considerado simplemente agregar sus constantes a su clase Message_Model? A continuación, los referenciará por self::ConstantName dentro de la clase y Message_Model::ConstantName fuera de la clase. Esto también evitaría la colisión del espacio de nombres.

+0

no creo que esto funciona en función de cómo Codeigniter carga los Modelos. – wag2639

4

Ir a application/config/constants.php y definir su constante su y usted puede utilizar sus constantes en el Modelo-Vista-Controlador de CI no incluye "ayudante" y "Biblioteca"

Pero en tu caso yo prefiero crear un php archivo que tiene sus constantes y cambiarle el nombre a algo como my_constants_helper.php.

En su modelo o controlador __construct simplemente

$this->load->helper('my_constants'); 

Y hurra puede acceder a ellos =)

+0

truco impresionante ... funciona como un encanto ... – user311509

Cuestiones relacionadas