/**
  * Dispatches a BanchaRequestCollection object. It uses the standard CakePHP dispatcher to dispatch the single
  * CakeRequest objects returned by BanchaRequest. Further it uses BanchaResponseCollection to transform the responses
  * into a single CakeResponse object. If the 'return' option in the $additionalParams argument is TRUE, the body of the
  * response is returned instead of directly sent to the browser.
  *
  * @param BanchaRequestCollection $requests A BanchaRequestCollection can contain multiple CakeRequest objects.
  * @param array $additionalParams If 'return' is TRUE, the body is returned instead of sent to the browser.
  * @return string|void If 'return' is TRUE, the body is returned otherwise void is returned.
  */
 public function dispatch(BanchaRequestCollection $requests, $additionalParams = array())
 {
     $collection = new BanchaResponseCollection();
     // Iterate through all requests, dispatch them and add the response to the transformer object.
     foreach ($requests->getRequests() as $request) {
         $skip_request = false;
         if (!$skip_request) {
             // Call dispatcher for the given CakeRequest.
             // We need to use a sub classes disaptcher, because some parameters are missing in Bancha requests and
             // because we need to full response, not only the body of the response.
             $dispatcher = new BanchaSingleDispatcher();
             try {
                 // dispatch the request
                 $response = new CakeResponse(array('charset' => Configure::read('App.encoding')));
                 $dispatcher->dispatch($request, $response, array('return' => true));
                 // add result to response colection
                 $collection->addResponse($request['tid'], $response, $request);
             } catch (Exception $e) {
                 $collection->addException($request['tid'], $e, $request);
             }
             // try catch
         }
         // if (!$skip_request)
     }
     // foreach
     // Combine the responses and return or output them.
     $responses = $collection->getResponses();
     if (isset($additionalParams['return']) && $additionalParams['return']) {
         return $responses->body();
     }
     $responses->send();
 }
 /**
  * Tests if the extUpload parameter is correctly passed through the CakeRequest.
  */
 public function testGetExtUploadForm()
 {
     $postData = array('extAction' => 'Test', 'extMethod' => 'submit', 'extTID' => 1, 'id' => 42, 'title' => 'Hello World', 'extUpload' => true);
     // Create a new request collection and parse the requests by calling getRequests().
     $collection = new BanchaRequestCollection('', $postData);
     $requests = $collection->getRequests();
     $this->assertEquals(true, $requests[0]['extUpload']);
 }