/**
  * @param View|\SplSubject $subject
  */
 public function update(\SplSubject $subject)
 {
     $viewConfig = $subject->getConfigServiceVerify()->getByObject($subject->getName(), new ViewConfig());
     if ($viewConfig == null) {
         throw new \Exception('Please fill ViewConfig for the ' . $subject->getName() . '. I can\'t work on');
     }
     $result['rowcount'] = $subject->getParam('rowcount', $viewConfig->rows);
     if ($result['rowcount'] != $viewConfig->rows) {
         $viewConfig->rows = $result['rowcount'];
         $subject->getViewConfigVerify()->rows = $result['rowcount'];
         $subject->getConfigServiceVerify()->saveByObject($viewConfig);
     }
     $subject->setData($result);
 }
 /**
  * @param \SplSubject|View $subject
  *
  * @throws \Exception
  */
 public function update(\SplSubject $subject)
 {
     $data = $subject->getParam('data', null);
     $view = $subject->getParam('view', null);
     if ($data == null || $view == null) {
         throw new \Exception('Please specify data param');
     }
     $data = ucfirst($data);
     $viewConfig = $subject->getConfigServiceVerify()->getByObject($data . '.' . $view, new ViewConfig());
     if ($viewConfig == null) {
         throw new \Exception('Please fill ViewConfig for the ' . $data . '.' . $view);
     }
     $this->viewViewConfig = $viewConfig;
     $modelConfig = $subject->getModelServiceVerify()->getParsedModelConfig($data);
     $aclData = $subject->getAclServiceVerify()->getAclConfig($data);
     $fieldConfigs = ['fields' => [], 'labels' => []];
     foreach ($viewConfig->fields as $field) {
         if (array_key_exists($field, $modelConfig['fields'])) {
             $fieldConfigs['fields'][$field] = false;
         }
     }
     //        ksort( $modelConfig['fields']);
     uasort($modelConfig['fields'], function ($a, $b) {
         return strcmp($a['label'], $b['label']);
     });
     foreach ($modelConfig['fields'] as $field => $fConfig) {
         if ($fConfig['type'] == 'field') {
             //check $field in acl
             if (!array_key_exists($field, $aclData->fields) || !in_array($aclData->fields[$field], ['read', 'write'])) {
                 unset($fieldConfigs['fields'][$field]);
                 continue;
             }
         }
         if ($fConfig['type'] == 'alias') {
             //check $fConfig['source'] in acl
             if (!array_key_exists($fConfig['source'], $aclData->fields) || !in_array($aclData->fields[$fConfig['source']], ['read', 'write'])) {
                 unset($fieldConfigs['fields'][$field]);
                 continue;
             }
         }
         if ($fConfig['type'] == 'source') {
             if ($fConfig['source'] !== $field || !array_key_exists($fConfig['source'], $aclData->fields) || !in_array($aclData->fields[$fConfig['source']], ['read', 'write'])) {
                 unset($fieldConfigs['fields'][$field]);
                 continue;
             }
         }
         if ($fConfig['type'] == 'pk') {
             continue;
         }
         $fieldConfigs['fields'][$field] = in_array($field, $viewConfig->fields) ? true : false;
         $fieldConfigs['labels'][$field] = $fConfig['label'];
     }
     $result = [];
     $result['fieldconfigs'] = $fieldConfigs;
     $result['params'] = ['data' => $data, 'view' => $view];
     $subject->setData($result);
     $this->postVerify($subject);
 }