Комментарии 12
Как же не хватает каскадных конфигов как у symfony
Подскажите как вы с этим живёте… переопределение параметров для модулей к примеру.
Подскажите как вы с этим живёте… переопределение параметров для модулей к примеру.
+3
Я, например, так:
И так далее.
// index.php
$config=dirname(__FILE__).'/../protected/config/web.php';
Yii::createWebApplication($config)->run();
<?php
// web.php
$configParts = array();
$configParts[] = require(dirname(__FILE__).'/common.php');
$configParts[] = require(dirname(__FILE__).'/../../config/common.php');
$configParts[] = require(dirname(__FILE__).'/system/web.php');
$configParts[] = require(dirname(__FILE__).'/../../config/web.php');
$configParts[] = require(dirname(__FILE__).'/system/database.php');
$configParts[] = require(dirname(__FILE__).'/../../config/database.php');
if (defined('YII_DEBUG') && YII_DEBUG == true)
{
$configParts[] = require(dirname(__FILE__).'/debug/common.php');
$configParts[] = require(dirname(__FILE__).'/debug/web.php');
}
foreach ($configParts as $k => $v)
{
if (!is_array($v))
{
$configParts[$k] = array();
}
}
return call_user_func_array('CMap::mergeArray', $configParts);
И так далее.
0
Как же не хватает каскадных конфигов как у symfony
Если я правильно понимаю (по названию), то это вполне возможно в Yii. Пример: github.com/tonydspaniard/yiinitializr-advanced
+2
Мы в проекте из-за его очень сильной специфичности не используем механизм модулей Yii, поэтому проблема переопределения параметров для модулей для нас не актуальна. Как раз как замена этому механизму был выбран подход описанный в этой статье и тут.
0
дело вкуса, конечно, но я бы заменил это:
на это:
опасно делать вот так:
т.к. вы глушите все ошибки внутри файла site.ru.php
require(dirname(dirname(__FILE__)) . '/server/eauth.php';
на это:
require __DIR__.'/../server/eauth.php';
опасно делать вот так:
@include dirname(__FILE__).'/runtime/sites/site.ru.php';
т.к. вы глушите все ошибки внутри файла site.ru.php
+5
__DIR__ ввели в 5.3
0
опасно делать вот так:
include dirname(__FILE__).'/runtime/sites/site.ru.php';
т.к. вы глушите все ошибки внутри файла site.ru.php
Это осознанное действие, т.к. в момент инклуда файла site.ru.php может не быть, в таком случае вместо warning получим значение null и корректно его обработаем. Да конечно правильней проверить перед инклудом наличие файла и в случае его отсутствия кинуть и обработать exception, но не хотелось в файле с конфигом выше return видеть такую конструкцию:
if( !file_exists($file) )
{
throw new Exception('Config file '.$file.' not exists');
}
include dirname(__FILE__).'/runtime/sites/site.ru.php';
т.к. вы глушите все ошибки внутри файла site.ru.php
Это осознанное действие, т.к. в момент инклуда файла site.ru.php может не быть, в таком случае вместо warning получим значение null и корректно его обработаем. Да конечно правильней проверить перед инклудом наличие файла и в случае его отсутствия кинуть и обработать exception, но не хотелось в файле с конфигом выше return видеть такую конструкцию:
if( !file_exists($file) )
{
throw new Exception('Config file '.$file.' not exists');
}
0
@include dirname(__FILE__).'/runtime/sites/site.ru.php';
Проблема не в том, что файла может не быть, а в том, что он может содержать ошибки. Если внутри файла
site.ru.php
возникнет нотис или ворнинг — Вы их не увидите. Если внутри файла site.ru.php
вы пропустите запятую или точку с запятой, чем вызовите ошибку парсинга — Вы увидите белый экран. 0
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
Структура конфигов на сайтах Алавар