forked from Enrise/Glitch_Lib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Viewrenderer.php
112 lines (101 loc) · 3.82 KB
/
Viewrenderer.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
/**
* Glitch
*
* This source file is proprietary and protected by international
* copyright and trade secret laws. No part of this source file may
* be reproduced, copied, adapted, modified, distributed, transferred,
* translated, disclosed, displayed or otherwise used by anyone in any
* form or by any means without the express written authorization of
* 4worx software innovators BV (www.4worx.com)
*
* @category Glitch
* @package Glitch_Application
* @subpackage Resource
* @author 4worx <info@4worx.com>
* @copyright 2010, 4worx
* @version $Id$
*/
/**
* Resource for setting view rendering options
*
* @category Glitch
* @package Glitch_Application
* @subpackage Resource
*/
class Glitch_Application_Resource_ViewRenderer extends Zend_Application_Resource_ResourceAbstract
{
/**
* Name of the view renderer class
*
* This name may be overridden by extending classes in order to provide
* a custom class. Set the new value in the child init().
*
* @var string
*/
protected $_className = 'Zend_Controller_Action_Helper_ViewRenderer';
/**
* View renderer
*
* @var Zend_Controller_Action_Helper_ViewRenderer
*/
protected $_viewRenderer = null;
/**
* Defined by Zend_Application_Resource_Resource
*
* @return Zend_Controller_Action_Helper_ViewRenderer|null
*/
public function init()
{
return $this->getViewRenderer();
}
/**
* Retrieves the view renderer object
*
* @return Zend_Controller_Action_Helper_ViewRenderer|null
* @throws Glitch_Application_Resource_Exception
*/
public function getViewRenderer()
{
if (null === $this->_viewRenderer)
{
// Pull in the front controller; bootstrap first if necessary
$this->_bootstrap->bootstrap('FrontController');
$front = $this->_bootstrap->getResource('FrontController');
// Ignore if no view renderer is to be used
if ($front->getParam('noViewRenderer'))
{
return null;
}
// Get existing renderer, if any, or create a new one
$this->_viewRenderer = (Zend_Controller_Action_HelperBroker::hasHelper('viewRenderer'))
? Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')
: new $this->_className(null, $this->getOptions());
// Dynamic class loading; perform sanity check
if (!$this->_viewRenderer instanceof Zend_Controller_Action_Helper_ViewRenderer)
{
throw new Glitch_Application_Resource_Exception('Class is not a valid view renderer instance');
}
// Register the view as the default view for handling view scripts
$this->_bootstrap->bootstrap('View');
$view = $this->_bootstrap->getResource('View');
$this->_viewRenderer->setView($view);
// It is paramount to set this base path spec: ZF otherwise uses its own
// spec, causing it to create a path to a conventional ZF-style directory
$this->_viewRenderer->setViewBasePathSpec(':module/' . Glitch_View::PATH_VIEW);
// Set empty inflector settings: all path translations are handled by the custom dispatcher
$inflector = new Zend_Filter_Inflector();
$inflector->addRules(array(
':module' => array(),
':controller' => array(),
':action' => array(),
));
$this->_viewRenderer->setInflector($inflector, true);
if (!Zend_Controller_Action_HelperBroker::hasHelper('viewRenderer'))
{
Zend_Controller_Action_HelperBroker::addHelper($this->_viewRenderer);
}
}
return $this->_viewRenderer;
}
}