mirror of
https://github.com/torrentpier/torrentpier-lts.git
synced 2025-03-01 15:21:02 +03:00
75 lines
2.0 KiB
PHP
75 lines
2.0 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Zend Framework (http://framework.zend.com/)
|
||
|
*
|
||
|
* @link http://github.com/zendframework/zf2 for the canonical source repository
|
||
|
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
|
||
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||
|
*/
|
||
|
|
||
|
namespace Zend\View\Resolver;
|
||
|
|
||
|
use Zend\View\Helper\ViewModel as ViewModelHelper;
|
||
|
use Zend\View\Model\ModelInterface;
|
||
|
use Zend\View\Renderer\RendererInterface;
|
||
|
|
||
|
/**
|
||
|
* Relative fallback resolver - resolves to view templates in a sub-path of the
|
||
|
* currently set view model's template (if the current renderer has the `view_model` plugin set).
|
||
|
*
|
||
|
* This allows for usage of partial template paths such as `some/partial`, resolving to
|
||
|
* `my/module/script/path/some/partial.phtml`, while rendering template `my/module/script/path/my-view`
|
||
|
*/
|
||
|
class RelativeFallbackResolver implements ResolverInterface
|
||
|
{
|
||
|
const NS_SEPARATOR = '/';
|
||
|
|
||
|
/**
|
||
|
* @var ResolverInterface
|
||
|
*/
|
||
|
private $resolver;
|
||
|
|
||
|
/**
|
||
|
* Constructor
|
||
|
*
|
||
|
* @param ResolverInterface $resolver
|
||
|
*/
|
||
|
public function __construct(ResolverInterface $resolver)
|
||
|
{
|
||
|
$this->resolver = $resolver;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public function resolve($name, RendererInterface $renderer = null)
|
||
|
{
|
||
|
$plugin = array($renderer, 'plugin');
|
||
|
|
||
|
if (! is_callable($plugin)) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$helper = call_user_func($plugin, 'view_model');
|
||
|
|
||
|
if (! $helper instanceof ViewModelHelper) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$currentModel = $helper->getCurrent();
|
||
|
|
||
|
if (! $currentModel instanceof ModelInterface) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$currentTemplate = $currentModel->getTemplate();
|
||
|
$position = strrpos($currentTemplate, self::NS_SEPARATOR);
|
||
|
|
||
|
if (! $position) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return $this->resolver->resolve(substr($currentTemplate, 0, $position) . self::NS_SEPARATOR . $name, $renderer);
|
||
|
}
|
||
|
}
|