[TWIG] Add `instanceof` test

Use with:
{% if var is instanceof(Namespace\Class) %}
This commit is contained in:
Hugo Sales 2021-09-27 10:38:06 +01:00
parent 2d8b220e92
commit 1107d8257d
Signed by: someonewithpc
GPG Key ID: 7D0C7EAFC9D835A0
2 changed files with 14 additions and 1 deletions

View File

@ -32,6 +32,7 @@ namespace App\Twig;
use Twig\Extension\AbstractExtension; use Twig\Extension\AbstractExtension;
use Twig\TwigFunction; use Twig\TwigFunction;
use Twig\TwigTest;
class Extension extends AbstractExtension class Extension extends AbstractExtension
{ {
@ -42,6 +43,13 @@ class Extension extends AbstractExtension
]; ];
} }
public function getTests()
{
return [
new TwigTest('instanceof', [Runtime::class, 'isInstanceOf']),
];
}
/** /**
* get twig functions * get twig functions
* *

View File

@ -119,11 +119,16 @@ class Runtime implements RuntimeExtensionInterface, EventSubscriberInterface
public function isFirefox(): bool public function isFirefox(): bool
{ {
$re_has_chrome = '/.*(?i)\bchrome\b.*/m'; $re_has_chrome = '/.*(?i)\bchrome\b.*/m';
$re_has_gecko = '/.*(?i)\bgecko\b.*/m'; $re_has_gecko = '/.*(?i)\bgecko\b.*/m';
return (preg_match(pattern: $re_has_chrome, subject: $this->request->headers->get('User-Agent')) !== 1) return (preg_match(pattern: $re_has_chrome, subject: $this->request->headers->get('User-Agent')) !== 1)
&& (preg_match(pattern: $re_has_gecko, subject: $this->request->headers->get('User-Agent')) === 1); && (preg_match(pattern: $re_has_gecko, subject: $this->request->headers->get('User-Agent')) === 1);
} }
public function isInstanceOf($var, string $instance): bool
{
return $var instanceof $instance;
}
// ---------------------------------------------------------- // ----------------------------------------------------------
/** /**