Схема:
Config:
tableName: sf_config
columns:
id: { type: integer(4), primary: true, autoincrement: true }
name: { type: string(32) }
value: { type: string(32) }
description: { type: string(1024) }
Класс /lib/myConfig.class.php:
class myConfig extends sfConfig
{
public static function get($name, $default = null, $description = null)
{
if (!sfConfig::get($name))
{
$res = Doctrine::getTable('Config')->findOneByName($name);
if (!$res)
{
$c = new Config();
$c->setName($name);
$c->setValue($default);
$c->setDescription($description);
$c->save();
}
}
return (isSet(self::$config[$name]) ? self::$config[$name] : $default);
}
}
Данный класс не находя в настройках требуемого параметра, проверяет его наличие в таблице, и в случаее отсутствия добавляет его.
Фильтр /lib/filters/myConfigFilter.class.php:
class myConfigFilter extends sfFilter
{
public function execute ($filterChain)
{
$configs = Doctrine::getTable('Config')->findAll();
foreach ($configs as $config)
{
sfConfig::set($config->getName(), $config->getValue());
}
$filterChain->execute();
}
}
Фильтр экспортирует из БД настройки в sfConfig.
Добавляем в fontend/config/filters.yml
myConfig:
class: myConfigFilter
Используем:
$postDirName = sfConfig::get('sf_upload_dir').'/'.myConfig::get('posts_dir', 'posts');
'max_size' => myConfig::get('post_max_icon_size', '10', 'size in KBytes')*1024, //(10*1024=10KB in bytes)
Сгенерируем управление из backend
$ symfony doctrine:generate-admin backend Config
Используем backend_dev.php/config