original_string: public function render(array $data, ContextInterface $context)
      {
          $data += [
              'name' => '',
              'empty' => false,
              'escape' => true,
              'options' => [],
              'disabled' => null,
              'val' => null,
              'templateVars' => []
          ];
  
          $options = $this->_renderContent($data);
          $name = $data['name'];
          unset($data['name'], $data['options'], $data['empty'], $data['val'], $data['escape']);
          if (isset($data['disabled']) && is_array($data['disabled'])) {
              unset($data['disabled']);
          }
  
          $template = 'select';
          if (!empty($data['multiple'])) {
              $template = 'selectMultiple';
              unset($data['multiple']);
          }
          $attrs = $this->_templates->formatAttributes($data);
  
          return $this->_templates->format($template, [
              'name' => $name,
              'templateVars' => $data['templateVars'],
              'attrs' => $attrs,
              'content' => implode('', $options),
          ]);
      }
code: public function render(array $data, ContextInterface $context)
      {
          $data += [
              'name' => '',
              'empty' => false,
              'escape' => true,
              'options' => [],
              'disabled' => null,
              'val' => null,
              'templateVars' => []
          ];
  
          $options = $this->_renderContent($data);
          $name = $data['name'];
          unset($data['name'], $data['options'], $data['empty'], $data['val'], $data['escape']);
          if (isset($data['disabled']) && is_array($data['disabled'])) {
              unset($data['disabled']);
          }
  
          $template = 'select';
          if (!empty($data['multiple'])) {
              $template = 'selectMultiple';
              unset($data['multiple']);
          }
          $attrs = $this->_templates->formatAttributes($data);
  
          return $this->_templates->format($template, [
              'name' => $name,
              'templateVars' => $data['templateVars'],
              'attrs' => $attrs,
              'content' => implode('', $options),
          ]);
      }
code_tokens: public function render ( array $ data , ContextInterface $ context ) { $ data += [ 'name' => '' , 'empty' => false , 'escape' => true , 'options' => [ ] , 'disabled' => null , 'val' => null , 'templateVars' => [ ] ] ; $ options = $ this -> _renderContent ( $ data ) ; $ name = $ data [ 'name' ] ; unset ( $ data [ 'name' ] , $ data [ 'options' ] , $ data [ 'empty' ] , $ data [ 'val' ] , $ data [ 'escape' ] ) ; if ( isset ( $ data [ 'disabled' ] ) && is_array ( $ data [ 'disabled' ] ) ) { unset ( $ data [ 'disabled' ] ) ; } $ template = 'select' ; if ( ! empty ( $ data [ 'multiple' ] ) ) { $ template = 'selectMultiple' ; unset ( $ data [ 'multiple' ] ) ; } $ attrs = $ this -> _templates -> formatAttributes ( $ data ) ; return $ this -> _templates -> format ( $ template , [ 'name' => $ name , 'templateVars' => $ data [ 'templateVars' ] , 'attrs' => $ attrs , 'content' => implode ( '' , $ options ) , ] ) ; }
docstring: Render a select box form input.
  
  Render a select box input given a set of data. Supported keys
  are:
  
  - `name` - Set the input name.
  - `options` - An array of options.
  - `disabled` - Either true or an array of options to disable.
  When true, the select element will be disabled.
  - `val` - Either a string or an array of options to mark as selected.
  - `empty` - Set to true to add an empty option at the top of the
  option elements. Set to a string to define the display text of the
  empty option. If an array is used the key will set the value of the empty
  option while, the value will set the display text.
  - `escape` - Set to false to disable HTML escaping.
  
  ### Options format
  
  The options option can take a variety of data format depending on
  the complexity of HTML you want generated.
  
  You can generate simple options using a basic associative array:
  
  ```
  'options' => ['elk' => 'Elk', 'beaver' => 'Beaver']
  ```
  
  If you need to define additional attributes on your option elements
  you can use the complex form for options:
  
  ```
  'options' => [
  ['value' => 'elk', 'text' => 'Elk', 'data-foo' => 'bar'],
  ]
  ```
  
  This form **requires** that both the `value` and `text` keys be defined.
  If either is not set options will not be generated correctly.
  
  If you need to define option groups you can do those using nested arrays:
  
  ```
  'options' => [
  'Mammals' => [
  'elk' => 'Elk',
  'beaver' => 'Beaver'
  ]
  ]
  ```
  
  And finally, if you need to put attributes on your optgroup elements you
  can do that with a more complex nested array form:
  
  ```
  'options' => [
  [
  'text' => 'Mammals',
  'data-id' => 1,
  'options' => [
  'elk' => 'Elk',
  'beaver' => 'Beaver'
  ]
  ],
  ]
  ```
  
  You are free to mix each of the forms in the same option set, and
  nest complex types as required.
  
  @param array $data Data to render with.
  @param \Cake\View\Form\ContextInterface $context The current form context.
  @return string A generated select box.
  @throws \RuntimeException when the name attribute is empty.
docstring_tokens: Render a select box form input .