Completed
Push — master ( b3978b...8d3a7c )
by
unknown
26:09 queued 12:30
created

src/Engine.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace League\Plates;
4
5
/** API for the Plates system. This wraps the container and allows extensions to add methods for syntactic sugar. */
6
final class Engine
7
{
8
    private $container;
9
10 16
    public function __construct(Util\Container $container = null) {
11 16
        $this->container = $container ?: Util\Container::create(['engine_methods' => []]);
12
    }
13 16
14 16
    /** Create a configured engine and set the base dir and extension optionally */
15 16
    public static function create($base_dir, $ext = null) {
16
        return self::createWithConfig(array_filter([
17
            'base_dir' => $base_dir,
18
            'ext' => $ext
19
        ]));
20
    }
21
22
    /** Create a configured engine and pass in an array to configure after extension registration */
23
    public static function createWithConfig(array $config = []) {
24
        $plates = new self();
25 16
26 16
        $plates->register(new PlatesExtension());
27 16
        $plates->register(new Extension\Data\DataExtension());
28 16
        $plates->register(new Extension\Path\PathExtension());
29 16
        $plates->register(new Extension\RenderContext\RenderContextExtension());
30
        $plates->register(new Extension\LayoutSections\LayoutSectionsExtension());
31 16
        $plates->register(new Extension\Folders\FoldersExtension());
32 16
33
        $plates->addConfig($config);
0 ignored issues
show
Documentation Bug introduced by
The method addConfig does not exist on object<League\Plates\Engine>? Since you implemented __call, maybe consider adding a @method annotation.

If you implement __call and you know which methods are available, you can improve IDE auto-completion and static analysis by adding a @method annotation to the class.

This is often the case, when __call is implemented by a parent class and only the child class knows which methods exist:

class ParentClass {
    private $data = array();

    public function __call($method, array $args) {
        if (0 === strpos($method, 'get')) {
            return $this->data[strtolower(substr($method, 3))];
        }

        throw new \LogicException(sprintf('Unsupported method: %s', $method));
    }
}

/**
 * If this class knows which fields exist, you can specify the methods here:
 *
 * @method string getName()
 */
class SomeClass extends ParentClass { }
Loading history...
34
35 16
        return $plates;
36 16
    }
37
38
    /** @return string */
39 16
    public function render($template_name, array $data = [], array $attributes = []) {
40 16
        return $this->container->get('renderTemplate')->renderTemplate(new Template(
41
            $template_name,
42
            $data,
43 16
            $attributes
44 16
        ));
45
    }
46 16
47 16
    public function addMethods(array $methods) {
48 16
        $this->container->merge('engine_methods', $methods);
49 16
    }
50 16
    public function __call($method, array $args) {
51 16
        $methods = $this->container->get('engine_methods');
52 16
        if (isset($methods[$method])) {
53 16
            return $methods[$method]($this, ...$args);
54 16
        }
55 16
56 16
        throw new \BadMethodCallException("No method {$method} found for engine.");
57 16
    }
58
59 16
    /** @deprecated kept for bc */
60
    public function loadExtension(Extension $extension) {
61 16
        $this->register($extension);
62 16
    }
63 16
    public function register(Extension $extension) {
64 16
        $extension->register($this);
65
    }
66
67
    public function getContainer() {
68
        return $this->container;
69 16
    }
70
}
71