2010-06-14 14 views
5

Mam listę stałych (używam ich jako wyliczenia), niektóre są definicjami, a niektóre są tylko zmiennymi globalnymi.Gdzie umieścić plik stałych dla Codeigniter (PHP)?

Gdzie mam umieścić je w strukturze MVC, aby można było używać ich zarówno dla mojego modelu, jak i dla kontrolera, który musi się do niego odwoływać?

Wolałbym nie trzymać go w config/constants.php, ponieważ nie powinny być one wywoływane za wyjątkiem tego modelu i kontrolerów, które go używają.

Edit 1: Wyjaśnienie

Aby być bardziej konkretne, mam message_model modelu i ma grono stałych, które potrzebują I, które są przechowywane w message_model_constants.php. Gdzie powinienem wstawić message_model_constants.php i czy istnieje sposób, aby automatycznie włączyć go do kontrolera, który ładuje message_model, gdy message_model nie jest (i nie chcę, aby był) ładowany automatycznie.

Edit 2:

ja naprawdę nie chce mieć stałe auto załadowane z wyjątkiem kiedy użyć modelu

Odpowiedz

2

rozszerzenie Brennan Novak odpowiedź, można uprościć kod ładując plik konfiguracyjny w konstruktorze modelu. W ten sposób wystarczy załadować model do kontrolerów, a wszystko inne zostanie wykonane automatycznie.

model

class Message_model extends Model { 

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

Controller

class Some_controller extends Controller { 

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

Jak już wspomniano, pliki konfiguracyjne powinny być application/config/message_model_constants.php

1

dla globalnego configs, dodać do config/config.php lub utwórz config/application.php i następnie załaduj konfigurację, a następnie element.

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

Możesz załadować konkretny plik konfiguracyjny po załadowaniu określonego modelu do kontrolera. Na przykład w pliku:

application/controllers/messages.php 

byłoby użyć linię:

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

Jeśli umieścić go na górze kontrolera jak ten

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

Wtedy wszystko Stałe będą dostępne dla wszystkich funkcji i metod w danym sterowniku. Następnie wywołujesz każdą stałą konfiguracyjną, taką jak:

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

Możesz również nazwać chronione zmienne $; w konstrukcji również dla krótszej składni.

Jeśli używasz tych stałych config i modelu wiadomości w wielu różnych kontrolerach, możesz utworzyć plik "Library", który załaduje zarówno config, jak i model i zadeklaruje tam wszystkie zmienne.

0

Czy rozważałeś właśnie dodanie swoich stałych do klasy Message_Model? Następnie odwołasz się do nich przez self::ConstantName w klasie i Message_Model::ConstantName poza zajęciami. Zapobiegnie to również kolizji przestrzeni nazw.

+0

I nie sądzę, że to działa w oparciu o sposób wczytywania wzorców przez Codeigniter. – wag2639

4

idź do application/config/constants.php i zdefiniowania stałej ich można używać stałych na Model-View-Controller CI nie obejmują „Helper” i „Bibliotekę”

Ale w twoim przypadku wolę utworzenie php plik, który ma twoje stałe i zmień nazwę na coś takiego jak my_constants_helper.php.

W modelu lub kontrolera __construct tylko

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

I hurra można uzyskać do nich dostęp =)

+0

Niesamowita sztuczka ... Działa jak urok ... – user311509

Powiązane problemy