2015-02-19 7 views
1

Мне нужно создать что-то вроде «страницы конфигурации». Пользователи смогут редактировать свои настройки, используя конфигурационную форму. Конфигурация должна быть легко получена из кода. Конфигурация должна поддерживать различные типы настроек (скаляры, массивы)Symfony2 сохранение редактируемых параметров

Вопрос в следующем: как сохранить эти настройки? Сейчас у меня есть две идеи:

  • с использованием ConfigTreeBuilder и хранящие в конфигурационном файле
  • используя что-то вроде EAV и хранящие в базе данных

благодаря

+1

'ConfigTreeBuilder' используется только для семантической конфигурации, проводимой расслоении пользователем, а не приложений (я имею в виду веб-приложение) пользователя. – DonCallisto

+0

Это может быть полезно - http://docs.sylius.org/en/latest/bundles/SyliusSettingsBundle/index.html – qooplmao

+0

@DonCallisto - Да, идея использования ConfigTreeBuilder не очень хорошо. Благодарю. – Kotofey

ответ

0

И это хорошо.

Вот пример с parameters_user.yml

use Symfony\Component\Yaml\Parser; 
use Symfony\Component\Yaml\Exception\ParseException; 
use Symfony\Component\Yaml\Dumper; 

public function indexAction(Request $request) { 
    $dir = $this->get('kernel')->getRootDir() . '/config/'; 
    $filename = 'parameters_user.yml'; 
    $path = $dir . $filename; 

    $yaml = new Parser(); 
    try { 
     $values = $yaml->parse(file_get_contents($path)); 
    } catch (ParseException $e) { 
     printf("Unable to parse the YAML string: %s", $e->getMessage()); 
    } 

    $config = new Config(); 
    $config->setConfig($values['parameters']); 

    $form = $this->createForm(new ConfigType, $config); 
    $form->handleRequest($request); 
    $this->processForm($form, $path); 

    return array('form' => $form->createView()); 
} 

private function processForm($form, $path) { 
    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $config = $form->getData(); 

     $values['parameters'] = $config->toArray(); 

     $dumper = new Dumper(); 
     $yaml = $dumper->dump($values, 2); 
     file_put_contents($path, $yaml); 
    } 
} 
Смежные вопросы