Exemplo n.º 1
0
 /**
  * Renders values as JSON
  *
  * @todo   Determine what use case exists for accepting only $nameOrModel
  * @param  string|Model $nameOrModel The script/resource process, or a view model
  * @param  null|array|\ArrayAccess $values Values to use during rendering
  * @throws Exception\InvalidArgumentException
  * @return string The script output.
  */
 public function render($nameOrModel, $values = null)
 {
     if ($nameOrModel instanceof Model) {
         // Use case 1: View Model provided
         // Non-FeedModel: cast to FeedModel
         if (!$nameOrModel instanceof FeedModel) {
             $vars = $nameOrModel->getVariables();
             $options = $nameOrModel->getOptions();
             $type = $this->getFeedType();
             if (isset($options['feed_type'])) {
                 $type = $options['feed_type'];
             } else {
                 $this->setFeedType($type);
             }
             $nameOrModel = new FeedModel($vars, array('feed_type' => $type));
         }
     } elseif (is_string($nameOrModel)) {
         // Use case 2: string $nameOrModel + array|Traversable|Feed $values
         $nameOrModel = new FeedModel($values, (array) $nameOrModel);
     } else {
         // Use case 3: failure
         throw new Exception\InvalidArgumentException(sprintf('%s expects a ViewModel or a string feed type as the first argument; received "%s"', __METHOD__, is_object($nameOrModel) ? get_class($nameOrModel) : gettype($nameOrModel)));
     }
     // Get feed and type
     $feed = $nameOrModel->getFeed();
     $type = $nameOrModel->getFeedType();
     if (!$type) {
         $type = $this->getFeedType();
     } else {
         $this->setFeedType($type);
     }
     // Render feed
     return $feed->export($type);
 }
Exemplo n.º 2
0
 /**
  * Processes a view script and returns the output.
  *
  * @param  string|ModelInterface   $nameOrModel The script/resource process, or a view model
  * @param  null|array|\ArrayAccess $values      Values to use during rendering
  * @return string The script output.
  * @throws \LogicException
  */
 public function render($nameOrModel, $values = null)
 {
     $name = $nameOrModel;
     if ($nameOrModel instanceof ModelInterface) {
         $name = $this->resolver->resolve($nameOrModel->getTemplate(), $this);
         $values = (array) $nameOrModel->getVariables();
     }
     if (array_key_exists('helper', $values)) {
         throw new \LogicException('Variable $helper is reserved for Zend helpers and can\'t be passed to view.');
     }
     $values['helper'] = $this->helpers;
     return $this->engine->renderToString($name, $values);
 }
 /**
  * Retrieve values from a model and recurse its children to build a data structure
  *
  * @param  Model $model
  * @param  bool $mergeWithVariables Whether or not to merge children with
  *         the variables of the $model
  * @return array
  */
 protected function recurseModel(Model $model, $mergeWithVariables = true)
 {
     $values = [];
     if ($mergeWithVariables) {
         $values = $model->getVariables();
     }
     if ($values instanceof Traversable) {
         $values = ArrayUtils::iteratorToArray($values);
     }
     if (!$model->hasChildren()) {
         return $values;
     }
     $mergeChildren = $this->mergeUnnamedChildren();
     foreach ($model as $child) {
         $captureTo = $child->captureTo();
         if (!$captureTo && !$mergeChildren) {
             // We don't want to do anything with this child
             continue;
         }
         $childValues = $this->recurseModel($child);
         if ($captureTo) {
             // Capturing to a specific key
             // TODO please complete if append is true. must change old
             // value to array and append to array?
             $values[$captureTo] = $childValues;
         } elseif ($mergeChildren) {
             // Merging values with parent
             $values = array_replace_recursive($values, $childValues);
         }
     }
     return $values;
 }
Exemplo n.º 4
0
 /**
  * Recursively processes all ViewModels and returns output.
  *
  * @param  string|ModelInterface   $model        A ViewModel instance.
  * @param  null|array|\Traversable $values       Values to use when rendering. If none
  *                                               provided, uses those in the composed
  *                                               variables container.
  * @return string Console output.
  */
 public function render($model, $values = null)
 {
     if (!$model instanceof ModelInterface) {
         return '';
     }
     $result = '';
     $options = $model->getOptions();
     foreach ($options as $setting => $value) {
         $method = 'set' . $setting;
         if (method_exists($this, $method)) {
             $this->{$method}($value);
         }
         unset($method, $setting, $value);
     }
     unset($options);
     $values = $model->getVariables();
     if (isset($values['result'])) {
         // filter and append the result
         $result .= $this->getFilterChain()->filter($values['result']);
     }
     if ($model->hasChildren()) {
         // recursively render all children
         foreach ($model->getChildren() as $child) {
             $result .= $this->render($child, $values);
         }
     }
     return $result;
 }
Exemplo n.º 5
0
 /**
  * Recursively processes all ViewModels and returns output.
  *
  * @param string|ModelInterface $model A ViewModel instance.
  * @param null|array|\Traversable $values Values to use when rendering. If
  *     none provided, uses those in the composed variables container.
  * @return string Console output.
  */
 public function render($model, $values = null)
 {
     $result = '';
     if (!$model instanceof ModelInterface) {
         // View model is required by this renderer
         return $result;
     }
     // If option keys match setters, pass values to those methods.
     foreach ($model->getOptions() as $setting => $value) {
         $method = 'set' . $setting;
         if (method_exists($this, $method)) {
             $this->{$method}($value);
         }
     }
     // Render children first
     if ($model->hasChildren()) {
         // recursively render all children
         foreach ($model->getChildren() as $child) {
             $result .= $this->render($child, $values);
         }
     }
     // Render the result, if present.
     $values = $model->getVariables();
     if (isset($values['result']) && !isset($this->filterChain)) {
         // append the result verbatim
         $result .= $values['result'];
     }
     if (isset($values['result']) && isset($this->filterChain)) {
         // filter and append the result
         $result .= $this->getFilterChain()->filter($values['result']);
     }
     return $result;
 }
 /**
  * Merge global/template parameters with provided view model.
  *
  * @param string $name Template name.
  * @param ModelInterface $model
  * @return ModelInterface
  */
 private function mergeViewModel($name, ModelInterface $model)
 {
     $params = $this->mergeParams($name, $model->getVariables());
     $model->setVariables($params);
     $model->setTemplate($name);
     return $model;
 }
 /**
  * @param  string|ModelInterface   $nameOrModel The script/resource process, or a view model
  * @param  null|array|\ArrayAccess $values      Values to use during rendering
  * @return string                  The script output.
  */
 public function render($nameOrModel, $values = null)
 {
     $result = $this->negotiator->negotiate($nameOrModel->getVariables(), $nameOrModel->getAccept());
     return $result;
 }