web-dev-qa-db-fra.com

Développement SetEnv APPLICATION_ENV - .htaccess interagit avec Zend Framework?

J'ai ce qui suit sur mon htaccess.

SetEnv APPLICATION_ENV development

Lorsque je passe ce fichier à prodution, je le change en:

SetEnv APPLICATION_ENV production

Cette

développement

et

production

sont définis sur Zend Framework application.ini correct?

Comment Zend et Apache communiquent-ils ici? Comment Zend connaît-il cette instruction htaccess?

Merci.

25
MEM

SetEnv, utilisé dans la configuration d'Apache (que ce soit un fichier .htaccess ou un VirtualHost), définit une variable d'environnement.

Depuis PHP, vous pouvez lire les variables d'environnement soit:


Jetant un œil à la index.php in Zend Frameworks QuickStart , vous verrez qu'il utilise cette variable d'environnement pour définir la PHP constante appelée APPLICATION_ENV:

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

Et cette constante est utilisée plus tard pour initialiser l'application:

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
39
Pascal MARTIN

Le flux de communication, comme vous l'appelez, est le suivant:

Si tu utilises

Production SetEnv APPLICATION_ENV

dans votre .htaccess, l'environnement que vous y définissez sera utilisé. Pourquoi?

Le morceau de code suivant de votre index.php ne définit pas la constante, si elle a déjà été définie, ce qui est le cas, si vous utilisez SetEnv dans votre .htaccess.

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

Si votre .htaccess ne définit pas la constante, la valeur fournie dans l'index.php sera utilisée. Si j'étais vous, je le garderais toujours synchronisé. Parce que vous pouvez faire des erreurs comme oublier de définir AllowOverride pour votre vhost, ce qui entraînerait une situation où l'environnement est défini par index.php même si le .htaccess est présent.

9
markus