web-dev-qa-db-fra.com

Code Igniter - meilleur endroit pour déclarer une variable globale

J'ai lu beaucoup de questions similaires, elles peuvent sembler être des doublons, mais aucune ne demande exactement ce que je demande, et plus important encore: aucune n'a la RÉPONSE que je cherche!

C'est extrêmement simple: je veux juste utiliser un $variable à plusieurs endroits: non seulement les vues et les contrôleurs, mais aussi dans le routes.php et d'autres fichiers de configuration.

Je ne veux pas de choses comme: utilisez la classe Config pour charger des fichiers de configuration; utilisez get_instance, et cetera.

Je veux juste déclarer un $variable donné (ce peut être une constante, mais j'en ai besoin en tant que variable), et l'utiliser absolument partout.

En fait ... j'aimerais savoir quel fichier PHP dans le bootstrap de CI est l'un des premiers à être analysé. Je pourrais donc y introduire ma variable globale ... mais pas un noyau/système ou non approuvé. fichier, mais le "meilleur" placement adapté à cette exigence simple.

Je vous remercie.

13
J. Bruni

Il y a un fichier dans /application/config appelé constants.php

Je mets normalement tous les miens avec un commentaire pour voir facilement où ils se trouvent:

/**
 * Custom defines
 */
define('blah', 'hello mum!');
$myglobalvar = 'hey there';

Une fois que votre index.php est chargé, il charge le fichier /core/CodeIgniter.php qui, à son tour, charge le fichier de fonctions communes /core/Common.php, puis /application/constants.php, de sorte que dans la chaîne de données, il s’agit du quatrième fichier à charger.

33
Dale

J'utilise une classe "Globals" dans un fichier d'assistance avec des méthodes statiques pour gérer toutes les variables globales de mon application. Voici ce que j'ai

globals_helper.php (dans le répertoire helpers)

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

// Application specific global variables
class Globals
{
    private static $authenticatedMemberId = null;
    private static $initialized = false;

    private static function initialize()
    {
        if (self::$initialized)
            return;

        self::$authenticatedMemberId = null;
        self::$initialized = true;
    }

    public static function setAuthenticatedMemeberId($memberId)
    {
        self::initialize();
        self::$authenticatedMemberId = $memberId;
    }


    public static function authenticatedMemeberId()
    {
        self::initialize();
        return self::$authenticatedMemberId;
    }
}

Ensuite, chargez ceci automatiquement dans le fichier autoload.php

$autoload['helper'] = array('globals');

Enfin, pour une utilisation depuis n'importe où dans le code, vous pouvez le faire pour définir les variables:

Globals::setAuthenticatedMemeberId('somememberid');

Et ceci pour le lire:

Globals::authenticatedMemeberId()

Remarque: La raison pour laquelle j'ai laissé les appels d'initialisation dans la classe Globals est d'avoir une possibilité d'extension future avec des initialiseurs pour la classe si nécessaire. Vous pouvez également rendre les propriétés publiques si vous n'avez besoin d'aucun type de contrôle sur ce qui est défini et lu via les setters/getters.

3
Spartak

Vous pouvez également créer un fichier constants_helper.php, puis y placer vos variables. Exemple:

define('MY_CUSTOM_DIR', base_url().'custom_dir_folder/');

Ensuite, sur votre application/config/autoload.php, chargez automatiquement votre assistant de contstants

$autoload['helper'] = array('contstants');
2
lucentx

à l'intérieur du fichier application/conf/contants.php:

global $myVAR;
$myVAR= 'http://'.$_SERVER["HTTP_Host"].'/';

et mettre dans un fichier d'en-tête ou à l'intérieur d'une fonction:

global $myVAR;
$myVAR= 'some value';
1
user1817927

Le meilleur endroit pour déclarer global variable dans codeigniter est le fichier constants.php du répertoire /application/config 

Vous pouvez définir votre variable globale comme suit

/**
 * Custom definitions
 */
define('first_custom_variable', 'thisisit');
$yourglobalvariable = 'thisisimyglobalvariable';
0
Mad Angle