mirror of
https://github.com/torrentpier/torrentpier-lts.git
synced 2025-03-01 15:21:02 +03:00
134 lines
3.1 KiB
PHP
134 lines
3.1 KiB
PHP
<?php
|
|
/**
|
|
* Zend Framework (http://framework.zend.com/)
|
|
*
|
|
* @link http://github.com/zendframework/zf2 for the canonical source repository
|
|
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
|
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|
*/
|
|
|
|
namespace Zend\View\Helper;
|
|
|
|
use Zend\View\Exception;
|
|
use Zend\View\Model\ModelInterface as Model;
|
|
|
|
/**
|
|
* Helper for rendering child view models
|
|
*
|
|
* Finds children matching "capture-to" values, and renders them using the
|
|
* composed view instance.
|
|
*/
|
|
class RenderChildModel extends AbstractHelper
|
|
{
|
|
/**
|
|
* Current view model
|
|
*
|
|
* @var Model
|
|
*/
|
|
protected $current;
|
|
|
|
/**
|
|
* View model helper instance
|
|
*
|
|
* @var ViewModel
|
|
*/
|
|
protected $viewModelHelper;
|
|
|
|
/**
|
|
* Invoke as a function
|
|
*
|
|
* Proxies to {render()}.
|
|
*
|
|
* @param string $child
|
|
* @return string
|
|
*/
|
|
public function __invoke($child)
|
|
{
|
|
return $this->render($child);
|
|
}
|
|
|
|
/**
|
|
* Render a model
|
|
*
|
|
* If a matching child model is found, it is rendered. If not, an empty
|
|
* string is returned.
|
|
*
|
|
* @param string $child
|
|
* @return string
|
|
*/
|
|
public function render($child)
|
|
{
|
|
$model = $this->findChild($child);
|
|
if (!$model) {
|
|
return '';
|
|
}
|
|
|
|
$current = $this->current;
|
|
$view = $this->getView();
|
|
$return = $view->render($model);
|
|
$helper = $this->getViewModelHelper();
|
|
$helper->setCurrent($current);
|
|
|
|
return $return;
|
|
}
|
|
|
|
/**
|
|
* Find the named child model
|
|
*
|
|
* Iterates through the current view model, looking for a child model that
|
|
* has a captureTo value matching the requested $child. If found, that child
|
|
* model is returned; otherwise, a boolean false is returned.
|
|
*
|
|
* @param string $child
|
|
* @return false|Model
|
|
*/
|
|
protected function findChild($child)
|
|
{
|
|
$this->current = $model = $this->getCurrent();
|
|
foreach ($model->getChildren() as $childModel) {
|
|
if ($childModel->captureTo() == $child) {
|
|
return $childModel;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Get the current view model
|
|
*
|
|
* @throws Exception\RuntimeException
|
|
* @return null|Model
|
|
*/
|
|
protected function getCurrent()
|
|
{
|
|
$helper = $this->getViewModelHelper();
|
|
if (!$helper->hasCurrent()) {
|
|
throw new Exception\RuntimeException(sprintf(
|
|
'%s: no view model currently registered in renderer; cannot query for children',
|
|
__METHOD__
|
|
));
|
|
}
|
|
|
|
return $helper->getCurrent();
|
|
}
|
|
|
|
/**
|
|
* Retrieve the view model helper
|
|
*
|
|
* @return ViewModel
|
|
*/
|
|
protected function getViewModelHelper()
|
|
{
|
|
if ($this->viewModelHelper) {
|
|
return $this->viewModelHelper;
|
|
}
|
|
|
|
if (method_exists($this->getView(), 'plugin')) {
|
|
$this->viewModelHelper = $this->view->plugin('view_model');
|
|
}
|
|
|
|
return $this->viewModelHelper;
|
|
}
|
|
}
|