通过后端编辑app.yml中的值

时间:2011-09-04 11:55:01

标签: php symfony1 doctrine symfony-1.4

public function executeShow(sfWebRequest $request)
{
  $this->category = $this->getRoute()->getObject();

  $this->pager = new sfDoctrinePager(
    'JobeetJob',
    sfConfig::get('app_max_jobs_on_category')
  );
  $this->pager->setQuery($this->category->getActiveJobsQuery());
  $this->pager->setPage($request->getParameter('page', 1));
  $this->pager->init();
}
  

sfConfig ::的get( 'app_max_jobs_on_category')

# apps/frontend/config/app.yml
all:
  active_days:          30
  max_jobs_on_homepage: 10
  max_jobs_on_category: 20

如何让管理员在后端编辑这个值(max_jobs_on_category)? 有可能每个用户只能为自己编辑吗?

1 个答案:

答案 0 :(得分:2)

我认为您最好为这些设置创建数据库模型。然后,您可以在过滤器中查询数据库(例如,请参阅http://www.symfony-project.org/gentle-introduction/1_4/en/06-Inside-the-Controller-Layer#chapter_06_sub_the_filter_chain)。

例如:

AppSetting:
  columns:
    id:
      type: integer(4)
      primary: true
    name:
      type: string(100)
      notnull: true
    value:
      type: string(100)

示例过滤器代码:

$settings = Doctrine_Core::getTable('AppSetting')->fetchAll();
foreach ($settings as $setting) {
  sfConfig::set($setting->getName(), $setting->getValue());
}

当然,每次请求加载所有这些设置都需要额外的开销,您可以根据需要查询它们:

Doctrine_Core::getTable('AppSetting')->findOneByName('some_setting')->getValue();

或者您可以更进一步为它们创建一些序列化缓存。但最后,如果您需要从Web界面进行编辑,我会选择数据库解决方案。