Skip to content

Commit fb360f1

Browse files
author
MrAnyx
committed
[fix] Fixed twig filtr and function
1 parent dbd255a commit fb360f1

File tree

4 files changed

+110
-71
lines changed

4 files changed

+110
-71
lines changed

src/Foundation/Twig.php

Lines changed: 14 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,12 @@
22

33
namespace TimePHP\Foundation;
44

5-
use function dump;
65
use Closure;
7-
use DateTime;
8-
use Twig\Markup;
96
use Twig\TwigFilter;
107
use Twig\Environment;
118
use Twig\TwigFunction;
12-
use TimePHP\UrlParser\Parser;
139
use Twig\Loader\FilesystemLoader;
1410
use TimePHP\Exception\TwigException;
15-
use TimePHP\Foundation\SessionHandler;
1611
use TimePHP\Foundation\Twig\FilterTwig;
1712
use TimePHP\Foundation\Twig\FunctionTwig;
1813

@@ -26,22 +21,6 @@ class Twig
2621
*/
2722
private $twig;
2823

29-
30-
/**
31-
* session handler
32-
*
33-
* @var SessionHandler
34-
*/
35-
private $session;
36-
37-
38-
/**
39-
* Url parser
40-
*
41-
* @var Parser
42-
*/
43-
private $request;
44-
4524
/**
4625
* array of custom options
4726
*
@@ -50,52 +29,23 @@ class Twig
5029
public function __construct(array $options)
5130
{
5231

53-
$this->session = new SessionHandler();
54-
$this->request = new Parser();
55-
56-
$filter = new FilterTwig();
57-
$function = new FunctionTwig();
58-
5932
$this->twig = new Environment(new FilesystemLoader(__DIR__ . "/../../../../../App/Bundle/Views"));
6033

61-
$this->twig->addFunction(new TwigFunction('asset', $function->asset));
62-
$this->twig->addFunction(new TwigFunction('component', function ($component): string {
63-
return sprintf('components/%s', ltrim($component, '/'));
64-
}));
65-
$this->twig->addFunction(new TwigFunction('generate', function (string $nameUrl, array $params = [], array $flags = []): string {
66-
return sprintf(Router::generate($nameUrl, $params, $flags));
67-
}));
68-
$this->twig->addFunction(new TwigFunction('provideCsrf', function (string $csrfInputName = "csrf_token"): string {
69-
return !empty($_SESSION) ? new Markup("<input type=\"hidden\" name=\"$csrfInputName\" value=\"{$_SESSION["csrf_token"]}\"/>", "utf-8") : "";
70-
}, ['is_safe' => ['html']]));
71-
$this->twig->addFunction(new TwigFunction('dump', function ($object): string {
72-
ob_start();
73-
dump($object);
74-
return ob_get_clean();
75-
}));
76-
$this->twig->addFunction(new TwigFunction("get", function (string $param) {
77-
return $this->request->get($param) !== null ? $this->request->get($param) : null;
78-
}));
79-
$this->twig->addFunction(new TwigFunction("isConnected", function () {
80-
return $this->session->get("csrf_token") !== null;
81-
}));
82-
$this->twig->addFunction(new TwigFunction("isAdmin", function () {
83-
return $this->session->get("csrf_token") !== null && $this->session->get("user")->role === "admin";
84-
}));
85-
$this->twig->addFunction(new TwigFunction("isUser", function () {
86-
return $this->session->get("csrf_token") !== null && $this->session->get("user")->role === "user";
87-
}));
88-
89-
90-
91-
$this->twig->addFilter(new TwigFilter("truncate", function (string $text, int $length) {
92-
return substr($text, 0, $length);
93-
}));
94-
$this->twig->addFilter(new TwigFilter("formatDate", function (DateTime $date, string $format) {
95-
$date = new DateTime($date);
96-
return $date->format($format);
97-
}));
34+
$function = new FunctionTwig();
35+
$filter = new FilterTwig();
9836

37+
$this->twig->addFunction(new TwigFunction('asset', Closure::fromCallable([$function, "asset"])));
38+
$this->twig->addFunction(new TwigFunction('component', Closure::fromCallable([$function, "component"])));
39+
$this->twig->addFunction(new TwigFunction('generate', Closure::fromCallable([$function, "generate"])));
40+
$this->twig->addFunction(new TwigFunction('provideCsrf', Closure::fromCallable([$function, "provideCsrf"]),['is_safe' => ['html']]));
41+
$this->twig->addFunction(new TwigFunction('dump', Closure::fromCallable([$function, "dump"])));
42+
$this->twig->addFunction(new TwigFunction("get", Closure::fromCallable([$function, "get"])));
43+
$this->twig->addFunction(new TwigFunction("isConnected", Closure::fromCallable([$function, "isConnected"])));
44+
$this->twig->addFunction(new TwigFunction("isAdmin", Closure::fromCallable([$function, "isAdmin"])));
45+
$this->twig->addFunction(new TwigFunction("isUser", Closure::fromCallable([$function, "isUser"])));
46+
47+
$this->twig->addFilter(new TwigFilter("truncate", Closure::fromCallable([$filter, "truncate"])));
48+
$this->twig->addFilter(new TwigFilter("formatDate", Closure::fromCallable([$filter, "formatDate"])));
9949

10050
foreach ($options["twig"] as $function) {
10151

src/Foundation/Twig/FilterTwig.php

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,23 @@
22

33
namespace TimePHP\Foundation\Twig;
44

5-
class FilterTwig {
5+
use DateTime;
6+
use TimePHP\Foundation\Twig\TwigFeature;
67

7-
8+
class FilterTwig extends TwigFeature
9+
{
810

9-
}
11+
public function __construct()
12+
{
13+
parent::__construct();
14+
}
15+
16+
public function truncate(string $text, int $length) {
17+
return substr($text, 0, $length);
18+
}
19+
20+
public function formatDate(DateTime $date, string $format) {
21+
$date = new DateTime($date);
22+
return $date->format($format);
23+
}
24+
}

src/Foundation/Twig/FunctionTwig.php

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,55 @@
22

33
namespace TimePHP\Foundation\Twig;
44

5-
class FunctionTwig {
5+
use Twig\Markup;
6+
use function dump;
7+
use TimePHP\Foundation\Router;
8+
use TimePHP\Foundation\Twig\TwigFeature;
69

7-
public function asset($asset): string {
8-
return sprintf('/assets/%s', ltrim($asset, '/'));
10+
class FunctionTwig extends TwigFeature
11+
{
12+
13+
public function __construct()
14+
{
15+
parent::__construct();
916
}
1017

11-
}
18+
public function asset($asset) {
19+
return sprintf('/assets/%s', ltrim($asset, '/'));
20+
}
21+
22+
public function component($component): string {
23+
return sprintf('components/%s', ltrim($component, '/'));
24+
}
25+
26+
public function generate(string $nameUrl, array $params = [], array $flags = []): string {
27+
return sprintf(Router::generate($nameUrl, $params, $flags));
28+
}
29+
30+
public function provideCsrf(string $csrfInputName = "csrf_token"): string {
31+
return !empty($_SESSION) ? new Markup("<input type=\"hidden\" name=\"$csrfInputName\" value=\"{$_SESSION["csrf_token"]}\"/>", "utf-8") : "";
32+
}
33+
34+
public function dump($object): string {
35+
ob_start();
36+
dump($object);
37+
return ob_get_clean();
38+
}
39+
40+
public function get(string $param) {
41+
return $this->request->get($param) !== null ? $this->request->get($param) : null;
42+
}
43+
44+
public function isConnected() {
45+
return $this->session->get("csrf_token") !== null;
46+
}
47+
48+
public function isAdmin() {
49+
return $this->session->get("csrf_token") !== null && $this->session->get("user")->role === "admin";
50+
}
51+
52+
public function isUser() {
53+
return $this->session->get("csrf_token") !== null && $this->session->get("user")->role === "user";
54+
}
55+
56+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace TimePHP\Foundation\Twig;
4+
5+
use TimePHP\UrlParser\Parser;
6+
use TimePHP\Foundation\SessionHandler;
7+
8+
abstract class TwigFeature
9+
{
10+
/**
11+
* Request handler for get and post variables
12+
*
13+
* @var Parser
14+
*/
15+
protected $request;
16+
17+
/**
18+
* Sesison handler
19+
*
20+
* @var SessionHandler
21+
*/
22+
protected $session;
23+
24+
public function __construct()
25+
{
26+
$this->request = new Parser();
27+
$this->session = new SessionHandler();
28+
}
29+
}

0 commit comments

Comments
 (0)