Test Failed
Push — master ( d3a322...6ffd46 )
by Bogatkin
36:39
created

ViewRenderer.php (1 issue)

Labels
Severity

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
 * View.php
4
 */
5
6
namespace drdim\yii\pug;
7
8
use Pug\Pug;
9
use Yii;
10
use yii\base\View;
11
use yii\helpers\FileHelper;
12
13
/**
14
 * Class ViewRenderer
15
 * @package drdim\yii\pug
16
 */
17
class ViewRenderer extends \yii\base\ViewRenderer
18
{
19
20
    /**
21
     * @var string the directory or path alias pointing to where Pug cache will be stored. Set to false to disable
22
     * templates cache.
23
     */
24
    public $cachePath = '@runtime/pug/cache';
25
    /**
26
     * @var array Pug options.
27
     * @see https://github.com/pug-php/pug
28
     */
29
    public $options = [
30
        'pretty' => true,
31
        'extension' => '.pug',
32
        'upToDateCheck' => true,
33
        'debug' => false,
34
        'expressionLanguage' => 'php',
35
    ];
36
    /**
37
     * @var array Custom filters.
38
     * Keys of the array are names to call in template, values are names of functions or static methods of some class.
39
     * Example: `['rot13' => 'str_rot13', 'jsonEncode' => '\yii\helpers\Json::encode']`.
40
     * In the template you can use it like this: `{{ 'test'|rot13 }}` or `{{ model|jsonEncode }}`.
41
     */
42
    public $filters = [];
43
    /**
44
     * @var Pug pug environment object that renders pug templates
45
     */
46
    public $pug;
47
48
    public function init()
49
    {
50
        $cachePath = empty($this->cachePath) ? false : Yii::getAlias($this->cachePath);
51
52
        if (!empty($cachePath) && !file_exists($cachePath)) {
53
            FileHelper::createDirectory($cachePath);
0 ignored issues
show
It seems like $cachePath defined by empty($this->cachePath) ...Alias($this->cachePath) on line 50 can also be of type boolean; however, yii\helpers\BaseFileHelper::createDirectory() does only seem to accept string, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
54
        }
55
56
        if (!empty($cachePath) && !is_readable($cachePath)) {
57
            throw new Exception(\Yii::t('app', 'Pug cache path is not readable.'));
58
        }
59
60
        if (!empty($cachePath) && !is_writeable($cachePath)) {
61
            throw new Exception(\Yii::t('app', 'Pug cache path is not writable.'));
62
        }
63
64
        $this->pug = new Pug(array_merge([
65
            'cache' => $cachePath,
66
        ], $this->options));
67
68
        // Adding custom filters
69
        if (!empty($this->filters)) {
70
            foreach ($this->filters as $name => $handler) {
71
                $this->addFilter($name, $handler);
72
            }
73
        }
74
    }
75
76
    /**
77
     * Renders a view file.
78
     *
79
     * This method is invoked by [[View]] whenever it tries to render a view.
80
     * Child classes must implement this method to render the given view file.
81
     *
82
     * @param View $view the view object used for rendering the file.
83
     * @param string $file the view file.
84
     * @param array $params the parameters to be passed to the view file.
85
     *
86
     * @return string the rendering result
87
     */
88
    public function render($view, $file, $params)
89
    {
90
        return $this->pug->render($file, ['view' => $view] + $params);
91
    }
92
93
    /**
94
     * Adds custom filter
95
     * @param string $name
96
     * @param callable $handler
97
     */
98
    public function addFilter($name, $handler)
99
    {
100
        $this->pug->filter($name, $handler);
101
    }
102
}
103