public function create(array $data = [])
    {
        $data = array_filter($data);
        if (!isset($data['name']) || !isset($data['type'])) {
            throw new \LogicException('Missing one of the mandatory field!');
        }

        if (!isset($data['value'])) {
            $data['value'] = 0;
        }

        $name = $data['name'];
        $existingSetting = $this->get($name);

        if ($existingSetting) {
            throw new \LogicException(sprintf('Setting %s already exists.', $name));
        }

        $settingClass = $this->repo->getClassName();
        /** @var Setting $setting */
        $setting = new $settingClass();

        $this->eventDispatcher->dispatch(Events::PRE_CREATE, new SettingActionEvent($name, $data, $setting));

        #TODO Introduce array populate function in Setting document instead of this foreach.
        foreach ($data as $key => $value) {
            $setting->{'set'.ucfirst($key)}($value);
        }

        $this->manager->persist($setting);
        $this->manager->commit();

        $this->eventDispatcher->dispatch(Events::POST_CREATE, new SettingActionEvent($name, $data, $setting));

        return $setting;
    }
public function create(array $data = [])
    {
        $data = array_filter($data);
        if (!isset($data['name']) || !isset($data['type'])) {
            throw new \LogicException('Missing one of the mandatory field!');
        }

        if (!isset($data['value'])) {
            $data['value'] = 0;
        }

        $name = $data['name'];
        $existingSetting = $this->get($name);

        if ($existingSetting) {
            throw new \LogicException(sprintf('Setting %s already exists.', $name));
        }

        $settingClass = $this->repo->getClassName();
        /** @var Setting $setting */
        $setting = new $settingClass();

        $this->eventDispatcher->dispatch(Events::PRE_CREATE, new SettingActionEvent($name, $data, $setting));

        #TODO Introduce array populate function in Setting document instead of this foreach.
        foreach ($data as $key => $value) {
            $setting->{'set'.ucfirst($key)}($value);
        }

        $this->manager->persist($setting);
        $this->manager->commit();

        $this->eventDispatcher->dispatch(Events::POST_CREATE, new SettingActionEvent($name, $data, $setting));

        return $setting;
    }
public function create ( array $ data = [ ] ) { $ data = array_filter ( $ data ) ; if ( ! isset ( $ data [ 'name' ] ) || ! isset ( $ data [ 'type' ] ) ) { throw new \ LogicException ( 'Missing one of the mandatory field!' ) ; } if ( ! isset ( $ data [ 'value' ] ) ) { $ data [ 'value' ] = 0 ; } $ name = $ data [ 'name' ] ; $ existingSetting = $ this -> get ( $ name ) ; if ( $ existingSetting ) { throw new \ LogicException ( sprintf ( 'Setting %s already exists.' , $ name ) ) ; } $ settingClass = $ this -> repo -> getClassName ( ) ; /** @var Setting $setting */ $ setting = new $ settingClass ( ) ; $ this -> eventDispatcher -> dispatch ( Events :: PRE_CREATE , new SettingActionEvent ( $ name , $ data , $ setting ) ) ; #TODO Introduce array populate function in Setting document instead of this foreach. foreach ( $ data as $ key => $ value ) { $ setting -> { 'set' . ucfirst ( $ key ) } ( $ value ) ; } $ this -> manager -> persist ( $ setting ) ; $ this -> manager -> commit ( ) ; $ this -> eventDispatcher -> dispatch ( Events :: POST_CREATE , new SettingActionEvent ( $ name , $ data , $ setting ) ) ; return $ setting ; }
Creates setting.

@param array        $data

@return Setting
Creates setting .