Project

General

Profile

1
<?php
2

    
3
/*
4
 * This file is part of Twig.
5
 *
6
 * (c) 2009 Fabien Potencier
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11

    
12
/**
13
 * Loads a template from an array.
14
 *
15
 * When using this loader with a cache mechanism, you should know that a new cache
16
 * key is generated each time a template content "changes" (the cache key being the
17
 * source code of the template). If you don't want to see your cache grows out of
18
 * control, you need to take care of clearing the old cache file by yourself.
19
 *
20
 * This loader should only be used for unit testing.
21
 *
22
 * @author Fabien Potencier <fabien@symfony.com>
23
 */
24
class Twig_Loader_Array implements Twig_LoaderInterface, Twig_ExistsLoaderInterface
25
{
26
    protected $templates = array();
27

    
28
    /**
29
     * Constructor.
30
     *
31
     * @param array $templates An array of templates (keys are the names, and values are the source code)
32
     */
33
    public function __construct(array $templates)
34
    {
35
        $this->templates = $templates;
36
    }
37

    
38
    /**
39
     * Adds or overrides a template.
40
     *
41
     * @param string $name     The template name
42
     * @param string $template The template source
43
     */
44
    public function setTemplate($name, $template)
45
    {
46
        $this->templates[(string) $name] = $template;
47
    }
48

    
49
    /**
50
     * {@inheritdoc}
51
     */
52
    public function getSource($name)
53
    {
54
        $name = (string) $name;
55
        if (!isset($this->templates[$name])) {
56
            throw new Twig_Error_Loader(sprintf('Template "%s" is not defined.', $name));
57
        }
58

    
59
        return $this->templates[$name];
60
    }
61

    
62
    /**
63
     * {@inheritdoc}
64
     */
65
    public function exists($name)
66
    {
67
        return isset($this->templates[(string) $name]);
68
    }
69

    
70
    /**
71
     * {@inheritdoc}
72
     */
73
    public function getCacheKey($name)
74
    {
75
        $name = (string) $name;
76
        if (!isset($this->templates[$name])) {
77
            throw new Twig_Error_Loader(sprintf('Template "%s" is not defined.', $name));
78
        }
79

    
80
        return $this->templates[$name];
81
    }
82

    
83
    /**
84
     * {@inheritdoc}
85
     */
86
    public function isFresh($name, $time)
87
    {
88
        $name = (string) $name;
89
        if (!isset($this->templates[$name])) {
90
            throw new Twig_Error_Loader(sprintf('Template "%s" is not defined.', $name));
91
        }
92

    
93
        return true;
94
    }
95
}
(1-1/4)