requiresAtLeastOneElement() 공개 메소드

This method is applicable to prototype nodes only.
public requiresAtLeastOneElement ( ) : ArrayNodeDefinition
리턴 ArrayNodeDefinition
예제 #1
0
 protected function getMultipleQueuesConfiguration()
 {
     $node = new ArrayNodeDefinition('queues');
     $prototypeNode = $node->requiresAtLeastOneElement()->prototype('array');
     $this->addQueueNodeConfiguration($prototypeNode);
     $prototypeNode->children()->scalarNode('callback')->isRequired()->end()->end();
     $prototypeNode->end();
     return $node;
 }
예제 #2
0
 /**
  * Builds filter config tree for given filter name.
  *
  * @param string $filterName
  *
  * @return ArrayNodeDefinition
  */
 private function buildFilterTree($filterName)
 {
     $filter = new ArrayNodeDefinition($filterName);
     /** @var ParentNodeDefinitionInterface $node */
     $node = $filter->requiresAtLeastOneElement()->useAttributeAsKey('name')->prototype('array')->children()->scalarNode('name')->end()->arrayNode('relations')->children()->append($this->buildRelationsTree('search'))->append($this->buildRelationsTree('reset'))->end()->end()->scalarNode('request_field')->info('URL parameter name.')->isRequired()->end()->scalarNode('field')->info('Document field name.')->end()->arrayNode('tags')->info('Filter tags that will be passed to view data.')->prototype('scalar')->end()->end()->end();
     switch ($filterName) {
         case 'choice':
         case 'multi_choice':
             $node->children()->integerNode('size')->info('Result size to return.')->end()->arrayNode('sort')->children()->enumNode('type')->values(['_term', '_count'])->defaultValue('_term')->end()->enumNode('order')->values(['asc', 'desc'])->defaultValue('asc')->end()->arrayNode('priorities')->prototype('scalar')->end()->end()->end()->end();
             break;
         case 'fuzzy':
             $node->children()->scalarNode('fuzziness')->info('The maximum edit distance.')->end()->integerNode('prefix_length')->info('The number of initial characters which will not be “fuzzified”.
                             This helps to reduce the number of terms which must be examined.')->end()->integerNode('max_expansions')->info('The maximum number of terms that the fuzzy query will expand to.')->end()->end();
             break;
         case 'sort':
             $node->children()->arrayNode('choices')->prototype('array')->beforeNormalization()->always(function ($v) {
                 if (empty($v['fields']) && !empty($v['field'])) {
                     $field = ['field' => $v['field']];
                     if (array_key_exists('order', $v)) {
                         $field['order'] = $v['order'];
                     }
                     if (array_key_exists('mode', $v)) {
                         $field['mode'] = $v['mode'];
                     }
                     $v['fields'][] = $field;
                 }
                 if (empty($v['label'])) {
                     $v['label'] = $v['fields'][0]['field'];
                 }
                 return $v;
             })->end()->addDefaultsIfNotSet()->children()->scalarNode('label')->end()->scalarNode('field')->end()->scalarNode('order')->defaultValue('asc')->end()->scalarNode('mode')->defaultNull()->end()->scalarNode('key')->info('Custom parameter value')->end()->booleanNode('default')->defaultFalse()->end()->arrayNode('fields')->isRequired()->requiresAtLeastOneElement()->prototype('array')->children()->scalarNode('field')->isRequired()->end()->scalarNode('order')->defaultValue('asc')->end()->scalarNode('mode')->defaultNull()->end()->end()->end()->end()->end()->end()->end();
             break;
         case 'pager':
             $node->children()->integerNode('count_per_page')->info('Item count per page')->defaultValue(10)->end()->integerNode('max_pages')->info('Max pages displayed in pager at once.')->defaultValue(8)->end()->end();
             break;
         case 'range':
         case 'date_range':
             $node->children()->booleanNode('inclusive')->info('Whether filter should match range ends.')->defaultFalse()->end()->end();
             break;
         default:
             // Should not happen.
             break;
     }
     return $filter;
 }