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.
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.
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
<?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;
}
}
$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.
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');
à 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';
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';