Как стать автором
Обновить

Комментарии 12

Как же не хватает каскадных конфигов как у symfony
Подскажите как вы с этим живёте… переопределение параметров для модулей к примеру.
Я, например, так:
// 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);

И так далее.
Как же не хватает каскадных конфигов как у symfony

Если я правильно понимаю (по названию), то это вполне возможно в Yii. Пример: github.com/tonydspaniard/yiinitializr-advanced
Мы в проекте из-за его очень сильной специфичности не используем механизм модулей Yii, поэтому проблема переопределения параметров для модулей для нас не актуальна. Как раз как замена этому механизму был выбран подход описанный в этой статье и тут.
дело вкуса, конечно, но я бы заменил это:

require(dirname(dirname(__FILE__)) . '/server/eauth.php';

на это:
require __DIR__.'/../server/eauth.php';


опасно делать вот так:

@include dirname(__FILE__).'/runtime/sites/site.ru.php';

т.к. вы глушите все ошибки внутри файла site.ru.php
__DIR__ ввели в 5.3
Ага, 30 июня 2009 года. Думаете еще стоит подождать? Вдруг эта фича еще сыровата.
Дело не в том, что фича сыровата. Если проект крупный, и ему уже больше 4-5 лет, то там может быть просто опасно на 5.3 переезжать.

Я сам уже на 5.5 сижу, просто предположил, почему у них такой конфиг.
опасно делать вот так:

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 вы пропустите запятую или точку с запятой, чем вызовите ошибку парсинга — Вы увидите белый экран.
Действительно будет такая проблема. Спасибо, поправим подключение файла.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий