zend-blog-3-backend

Форк
0
56 строк · 1.3 Кб
1
<?php
2

3
namespace App\Twig\Extension;
4

5
use App\Exception\Twig\AssetNotExistException;
6
use Twig\Extension\AbstractExtension;
7
use Twig\TwigFunction;
8

9
class Assets extends AbstractExtension
10
{
11
    public function getFunctions()
12
    {
13
        return [
14
            new TwigFunction(
15
                'assets',
16
                [$this, 'assets'],
17
                [
18
                    'is_safe' => ['html'],
19
                ]
20
            ),
21
        ];
22
    }
23

24
    public function assets(string $path): string
25
    {
26
        $matches = [];
27
        if (!preg_match('/^(?P<prefix>.+)\.(?P<ext>css|js)$/', $path, $matches)) {
28
            return "<unknown src=\"{$path}\"/>";
29
        }
30

31
        if ($matches['ext'] === 'css') {
32
            $format = '<link rel="stylesheet" href="%s.v%d.css">';
33
        } else {
34
            $format = '<script src="%s.v%d.js"></script>';
35
        }
36

37
        return sprintf($format, $matches['prefix'], $this->version($path));
38
    }
39

40
    /**
41
     * @param string $path
42
     *
43
     * @return int
44
     */
45
    private function version(string $path): int
46
    {
47
        $file = APP_WEB_DIR . $path;
48
        if (!is_file($file)) {
49
            throw new AssetNotExistException('File not exist: ' . $file);
50
        }
51

52
        $mtime = (int)filemtime($file);
53

54
        return $mtime - (($mtime >> 20) << 20);
55
    }
56
}
57

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.