Обновление Slim 2.x до 3.x - настройка режима и замена GetInstance - PullRequest
0 голосов
/ 14 мая 2019

Я работаю над обновлением Slim 2.x до 3.x, чтобы исправить ошибки. В настоящее время в Slim 2 мы используем configureMode для хранения подключений к базе данных, зависящих от среды. В руководстве по обновлению до 3.0 сказано, что configureMode был удален, но не сказано, что использовать вместо него. Я никогда не работал на PHP так же хорошо, как кто-либо другой в моей группе (устаревший продукт).

В моем файле .htaccess мы устанавливаем среду

SetEnv SLIM_MODE development

в моем index.php в настоящее время мы используем configureMode для установки свойств db

$app->configureMode('development', function () use ($app) {
    $app->config(array(
        'masterDB' => array(
            'dbhost' => 'DEVDB',
            'dbuser' => 'USER',
            'dbpass' => 'PASS',
            'dbname' => 'MASTER'
        ),
        'userDB' => array(
            'dbuser' => 'USER',
            'dbpass' => 'PASS'
        ),
        'debug' => false
    ));
});

/**
 * QA configuration
 */ 
$app->configureMode('qa', function () use ($app) {
    $app->config(array(
        'masterDB' => array(
            'dbhost' => 'DEVDB',
            'dbuser' => 'USER',
            'dbpass' => 'PASS',
            'dbname' => 'MASTER'
        ),
        'userDB' => array(
            'dbuser' => 'USER',
            'dbpass' => 'PASS'
        ),
        'debug' => false
    ));
});

Для доступа к этим значениям мы используем getInstance, который также был удален.

$app = \Slim\Slim::getInstance();

В учебнике просто сказано, что они были удалены, и я не знаю, как их заменить. Может ли Slim 3.x поддерживать конфигурацию среды, которую мы используем в настоящее время, или ее необходимо настроить во время установки в этой среде?

Как правильно установить и получить доступ к этим значениям сейчас?

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

То, что вы спрашиваете, на самом деле является независимой от фреймворка проблемой.Существуют библиотеки, такие как vlucas / phpdotenv , которые помогут вам настроить параметры среды.Если вы предпочитаете не использовать такую ​​библиотеку, вы можете использовать простой механизм для переопределения параметров конфигурации, например, решение, предложенное @odan, но, на мой взгляд, это может быть немного проще.Вот решение, которое я на самом деле использовал раньше:

  1. Поместите стандартные настройки по умолчанию в массив.При желании вы можете поместить в файл
  2. . В каждой среде создать файл (с тем же именем), включающий настройки только для этой среды.
  3. Объединить эти два массива так, чтобы ключи, специфичные для средыперезаписать те же ключи из настроек по умолчанию.Эти файлы должны иметь

Настройки по умолчанию (settings.default.php):

<?php
return array(
    'cache-driver' => 'redis',
    'debug' => false,
);

Настройки среды (env.php):

<?php
return array(
    'debug' => true,
    'userDB' => array(
         'dbuser' => 'env-db-user',
         'dbpass' => 'env-db-pass'
     ), 
);

Если env.php существует, объединить массивы из двух файлов, возможно в index.php или app.php:

<?php
$defaultSettings = require 'settings.default.php';
$environmentSettings = file_exists('env.php') ? require 'env.php' : array();

$settings = array_merge($defaultSettings, $environmentSettings);
$app = new App($settings);

Теперь print_r($settings) выведет:

Array
(
    [cache-driver] => redis
    [debug] => 1
    [userDB] => Array
        (
            [dbuser] => env-db-user
            [dbpass] => env-db-pass
        )

)

Как видите, значение cache-driver исходит из настроек по умолчанию, debug перезаписывается, а userDB доступно только в этой среде.Это означает, что вы можете иметь разные массивы настроек для разных сред, что дает вам возможность контролировать поведение объектов, зависящих от этих значений.

0 голосов
/ 14 мая 2019

Я работаю с Slim 3 несколько лет, и я уверен, что не существует "официального" способа настройки параметров среды. Но я хотел бы рассказать вам, как я это делаю.

Сначала создайте каталог config/ в корневом каталоге вашего проекта.

Затем поместите все ваши файлы конфигурации в этот каталог config/.

  1. Создать файл: config/defaults.php

Файл содержит все настройки по умолчанию для всех сред.

<?php
//
// Configure defaults for the whole application.
//
// Error reporting
error_reporting(0);
ini_set('display_errors', '0');

// Timezone
date_default_timezone_set('Europe/Berlin');

// Slim settings
$settings = [
    'httpVersion' => '1.1',
    'responseChunkSize' => 4096,
    'outputBuffering' => 'append',
    'determineRouteBeforeAppMiddleware' => true,
    'displayErrorDetails' => false,
    'addContentLengthHeader' => true,
    'routerCacheFile' => false,
];

Полный пример

  1. Затем создайте файл конфигурации для среды разработки: config/development.php
<?php

//
// Development environment
//
$settings['env'] = 'development';

// Error reporting
error_reporting(E_ALL);
ini_set('display_errors', '1');

// Display all errors
$settings['displayErrorDetails'] = true;

$settings['db']['host'] = '{{db_host}}';
$settings['db']['database'] = '{{db_database}}';

Повторите этот шаг для integration.php, staging.php и production.php.

  1. Затем создайте файл env.php, чтобы определить эффективную среду.

Примечание: пожалуйста, не передавайте этот файл в git.

<?php
/**
 * Environment specific application configuration.
 *
 * You should store all secret information (username, password, token) here.
 *
 * Make sure the env.php file is added to your .gitignore
 * so it is not checked-in the code
 *
 * Place the env.php _outside_ the project root directory, to protect against
 * overwriting at deployment.
 *
 * This usage ensures that no sensitive passwords or API keys will
 * ever be in the version control history so there is less risk of
 * a security breach, and production values will never have to be
 * shared with all project collaborators.
 */
require __DIR__ . '/development.php';

// Database
$settings['db']['username'] = '{{db_username}}';
$settings['db']['password'] = '{{db_password}}';

// SMTP
$settings['smtp']['username'] = 'user@example.com';
$settings['smtp']['password'] = '';
  1. Затем создайте файл config/settings.php, который объединит все остальные файлы конфигурации:
<?php

// Defaults
require __DIR__ . '/defaults.php';

// Load environment configuration
if (file_exists(__DIR__ . '/../../env.php')) {
    require __DIR__ . '/../../env.php';
} elseif (file_exists(__DIR__ . '/env.php')) {
    require __DIR__ . '/env.php';
}

if (defined('APP_ENV')) {
    require __DIR__ . '/' . APP_ENV . '.php';
}

return $settings;

Использование

В вашем config/bootstrap.php вы можете загрузить все настройки и передать эту конфигурацию экземпляру Slim App:

// Instantiate the app
$app = new \Slim\App(['settings' => require __DIR__ . '/../config/settings.php']);

// Set up dependencies

// Register middleware

// Register routes

$app->run();
...