Use interfaces instead of abstract class for Twig extensions.
This commit is contained in:
parent
ea549dd0eb
commit
6efd02465f
4 changed files with 84 additions and 15 deletions
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
0.2503.260138
|
0.2504.11235
|
||||||
|
|
22
composer.lock
generated
22
composer.lock
generated
|
@ -976,16 +976,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpstan/phpstan",
|
"name": "phpstan/phpstan",
|
||||||
"version": "2.1.8",
|
"version": "2.1.11",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpstan/phpstan.git",
|
"url": "https://github.com/phpstan/phpstan.git",
|
||||||
"reference": "f9adff3b87c03b12cc7e46a30a524648e497758f"
|
"reference": "8ca5f79a8f63c49b2359065832a654e1ec70ac30"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/f9adff3b87c03b12cc7e46a30a524648e497758f",
|
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/8ca5f79a8f63c49b2359065832a654e1ec70ac30",
|
||||||
"reference": "f9adff3b87c03b12cc7e46a30a524648e497758f",
|
"reference": "8ca5f79a8f63c49b2359065832a654e1ec70ac30",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -1030,7 +1030,7 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-03-09T09:30:48+00:00"
|
"time": "2025-03-24T13:45:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/php-code-coverage",
|
"name": "phpunit/php-code-coverage",
|
||||||
|
@ -1356,16 +1356,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/phpunit",
|
"name": "phpunit/phpunit",
|
||||||
"version": "12.0.9",
|
"version": "12.0.10",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||||
"reference": "7835bb4276780e0bbb385ce0a777b839e03096db"
|
"reference": "6075843014de23bcd6992842d69ca99d25d6a433"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7835bb4276780e0bbb385ce0a777b839e03096db",
|
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6075843014de23bcd6992842d69ca99d25d6a433",
|
||||||
"reference": "7835bb4276780e0bbb385ce0a777b839e03096db",
|
"reference": "6075843014de23bcd6992842d69ca99d25d6a433",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -1433,7 +1433,7 @@
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||||
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
||||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.0.9"
|
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.0.10"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -1449,7 +1449,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-03-19T13:47:33+00:00"
|
"time": "2025-03-23T16:03:59+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/cli-parser",
|
"name": "sebastian/cli-parser",
|
||||||
|
|
65
src/Templating/Extension/TplExtensionCommon.php
Normal file
65
src/Templating/Extension/TplExtensionCommon.php
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
<?php
|
||||||
|
// TplExtensionCommon.php
|
||||||
|
// Created: 2025-04-01
|
||||||
|
// Updated: 2025-04-01
|
||||||
|
|
||||||
|
namespace Index\Templating\Extension;
|
||||||
|
|
||||||
|
use ReflectionClass;
|
||||||
|
use Twig\Node\Expression\Binary\AbstractBinary;
|
||||||
|
use Twig\Node\Expression\Unary\AbstractUnary;
|
||||||
|
use Twig\NodeVisitor\NodeVisitorInterface;
|
||||||
|
use Twig\TokenParser\TokenParserInterface;
|
||||||
|
use Twig\{ExpressionParser,OperatorPrecedenceChange,TwigFilter,TwigFunction,TwigTest};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides common implementations of the Twig extension methods so you can yoink them without having to extend AbstractExtension.
|
||||||
|
*/
|
||||||
|
trait TplExtensionCommon {
|
||||||
|
/** @return TokenParserInterface[] */
|
||||||
|
public function getTokenParsers() {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return NodeVisitorInterface[] */
|
||||||
|
public function getNodeVisitors() {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return TwigFilter[] */
|
||||||
|
public function getFilters() {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return TwigTest[] */
|
||||||
|
public function getTests() {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return TwigFunction[] */
|
||||||
|
public function getFunctions() {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array{
|
||||||
|
* array<string, array{precedence: int, precedence_change?: OperatorPrecedenceChange, class: class-string<AbstractUnary>}>,
|
||||||
|
* array<string, array{precedence: int, precedence_change?: OperatorPrecedenceChange, class?: class-string<AbstractBinary>, associativity: ExpressionParser::OPERATOR_*}>
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
public function getOperators() {
|
||||||
|
return [[], []];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLastModified(): int {
|
||||||
|
$path = (new ReflectionClass($this))->getFileName();
|
||||||
|
if($path === false || !is_file($path))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
$time = filemtime($path);
|
||||||
|
if($time === false)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return $time;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,24 +1,28 @@
|
||||||
<?php
|
<?php
|
||||||
// TplIndexExtension.php
|
// TplIndexExtension.php
|
||||||
// Created: 2024-08-04
|
// Created: 2024-08-04
|
||||||
// Updated: 2024-10-04
|
// Updated: 2025-04-01
|
||||||
|
|
||||||
namespace Index\Templating\Extension;
|
namespace Index\Templating\Extension;
|
||||||
|
|
||||||
use Index\{ByteFormat,Index};
|
use Index\{ByteFormat,Index};
|
||||||
use Twig\{Environment,TwigFilter,TwigFunction};
|
use Twig\{Environment,TwigFilter,TwigFunction};
|
||||||
use Twig\Extension\AbstractExtension;
|
use Twig\Extension\LastModifiedExtensionInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides version functions and additional functionality implemented in Index.
|
* Provides version functions and additional functionality implemented in Index.
|
||||||
*/
|
*/
|
||||||
class TplIndexExtension extends AbstractExtension {
|
class TplIndexExtension implements LastModifiedExtensionInterface {
|
||||||
|
use TplExtensionCommon;
|
||||||
|
|
||||||
|
#[\Override]
|
||||||
public function getFilters() {
|
public function getFilters() {
|
||||||
return [
|
return [
|
||||||
new TwigFilter('format_filesize', ByteFormat::format(...)),
|
new TwigFilter('format_filesize', ByteFormat::format(...)),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[\Override]
|
||||||
public function getFunctions() {
|
public function getFunctions() {
|
||||||
return [
|
return [
|
||||||
new TwigFunction('ndx_version', Index::version(...)),
|
new TwigFunction('ndx_version', Index::version(...)),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue