2016-08-18 8 views
0

Ich habe ein Content Management System, in dem Slug-basierte Konstanten für die einzelnen Verzeichnisse eines jeden angemeldeten Benutzers für einen oder alle Controller innerhalb des Modells definiert sind. Ich stolperte zufällig über diesen Fund, indem ich mit den neu definierten Konstanten pro eingeloggten Benutzer experimentierte.Codeigniter Slug-basierte Konstanten im Modell pro Benutzer neu definieren

Ich dachte nicht, dass die Neudefinition von Konstanten möglich ist, aber ich glaube nicht zu verstehen, wie Codeigniter oder PHP in der Lage ist, Konstanten auf diese Weise neu zu definieren. Ich erhalte keinen PHP-Fehler, der besagt, dass Konstanten nicht neu definiert werden können. Muss ich also annehmen, dass das Modell oder die Controller-Instanz für jeden Controller nicht gesetzt ist?

Controller:

class Content extends CI_Controller { 
    function __construct() 
    { 
     parent::__construct(); 
     $this->load->model('main_model'); 

     ... 
      get slug from logged_in user 
     ... 

     $this->main->set_slug_based_constants($slug) 
    } 
} 

Ein Hauptmodell (ich weiß, dass es schlecht ist, dies zu tun):

class Main_model extends CI_Model{ 

    public function set_slug_based_constants($slug) 
    { 
     define('CLOUDFRONT_DIRECTORY', $slug.'_cloudfront_directory'); 
    } 
} 

From Codeigniter Docs: dynamische Instanziierung. In CodeIgniter werden Komponenten geladen und Routinen nur bei Anforderung und nicht global ausgeführt.

So würde ich gerne glauben, dass meine Annahme in diesem Fall basierend auf den Codeigniter Docs korrekt ist.

Antwort

1

Es ist nicht so viel "unset" wie "noch nicht definiert". Jede Browseranforderung an eine URL (Controller) ist ein eindeutiger Prozess im Server. Daher wird die Konstante nicht neu definiert, sondern wird für jede URL-Anforderung neu instanziiert.

Wenn Sie versuchen, $this->main_model->set_slug_based_constants($slug); ein zweites Mal, wenn Sie wird erhalten eine PHP-Fehlermeldung ausgeführt besagt, dass Constant CLOUDFRONT_DIRECTORY bereits definiert.

Versuchen Sie diese Version des Controllers, um den Fehler zu sehen.

class Content extends CI_Controller 
{ 
    function __construct() 
    { 
     parent::__construct(); 
     $this->load->model('main_model'); 
     $this->main_model->set_slug_based_constants("Dave"); 
    } 

    function index() 
    { 
     echo "The constant's value is <strong>".CLOUDFRONT_DIRECTORY."</strong><br>"; 
     $this->main_model->set_slug_based_constants("jruser"); 
     echo "The constant's value is <strong>".CLOUDFRONT_DIRECTORY."</strong><br>";; 
    } 

} 

Es wird Ausgabe so etwas produzieren.

Der Wert der Konstante ist Dave_cloudfront_directory

Ein PHP-Fehler

Severity aufgetreten: models/Main_model.php:

Dateiname definiert Konstante CLOUDFRONT_DIRECTORY bereits: Beachten Sie

Nachricht

Zeilennummer: 13

Der Wert der Konstante ist Dave_cloudfront_directory

Verwandte Themen