diff --git a/composer.json b/composer.json
index 97e6968..13ad17f 100644
--- a/composer.json
+++ b/composer.json
@@ -40,7 +40,7 @@
"league/plates": "^3.3",
"mezzio/mezzio-helpers": "^5.2",
"mezzio/mezzio-router": "^3.0 || ^4.0",
- "mezzio/mezzio-template": "^2.0",
+ "mezzio/mezzio-template": "^2.0 || ^3.0",
"psr/container": "^1.0 || ^2.0"
},
"require-dev": {
@@ -55,7 +55,8 @@
},
"autoload": {
"psr-4": {
- "Mezzio\\Plates\\": "src/"
+ "Mezzio\\Plates\\": "src/",
+ "Mezzio\\Template\\": "resources/Mezzio/Template"
}
},
"autoload-dev": {
diff --git a/composer.lock b/composer.lock
index 3b62f51..4941911 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "94afc6bf3c5309cc47490703d63a4214",
+ "content-hash": "d8b0f5e2b9def9664c24134bceaf6fbf",
"packages": [
{
"name": "fig/http-message-util",
@@ -64,32 +64,32 @@
},
{
"name": "laminas/laminas-escaper",
- "version": "2.17.0",
+ "version": "2.18.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-escaper.git",
- "reference": "df1ef9503299a8e3920079a16263b578eaf7c3ba"
+ "reference": "06f211dfffff18d91844c1f55250d5d13c007e18"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/df1ef9503299a8e3920079a16263b578eaf7c3ba",
- "reference": "df1ef9503299a8e3920079a16263b578eaf7c3ba",
+ "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/06f211dfffff18d91844c1f55250d5d13c007e18",
+ "reference": "06f211dfffff18d91844c1f55250d5d13c007e18",
"shasum": ""
},
"require": {
"ext-ctype": "*",
"ext-mbstring": "*",
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
+ "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"conflict": {
"zendframework/zend-escaper": "*"
},
"require-dev": {
- "infection/infection": "^0.29.8",
- "laminas/laminas-coding-standard": "~3.0.1",
- "phpunit/phpunit": "^10.5.45",
- "psalm/plugin-phpunit": "^0.19.2",
- "vimeo/psalm": "^6.6.2"
+ "infection/infection": "^0.31.0",
+ "laminas/laminas-coding-standard": "~3.1.0",
+ "phpunit/phpunit": "^11.5.42",
+ "psalm/plugin-phpunit": "^0.19.5",
+ "vimeo/psalm": "^6.13.1"
},
"type": "library",
"autoload": {
@@ -121,7 +121,7 @@
"type": "community_bridge"
}
],
- "time": "2025-05-06T19:29:36+00:00"
+ "time": "2025-10-14T18:31:13+00:00"
},
{
"name": "league/plates",
@@ -349,16 +349,16 @@
},
{
"name": "mezzio/mezzio-template",
- "version": "2.13.0",
+ "version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/mezzio/mezzio-template.git",
- "reference": "ad72bb31036d0639a5c5a502af234217faf6932f"
+ "reference": "49a797e19b167b208327854c81eb079937f0b161"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mezzio/mezzio-template/zipball/ad72bb31036d0639a5c5a502af234217faf6932f",
- "reference": "ad72bb31036d0639a5c5a502af234217faf6932f",
+ "url": "https://api.github.com/repos/mezzio/mezzio-template/zipball/49a797e19b167b208327854c81eb079937f0b161",
+ "reference": "49a797e19b167b208327854c81eb079937f0b161",
"shasum": ""
},
"require": {
@@ -409,7 +409,7 @@
"type": "community_bridge"
}
],
- "time": "2025-10-11T08:45:28+00:00"
+ "time": "2025-10-11T09:18:27+00:00"
},
{
"name": "psr/container",
@@ -687,28 +687,28 @@
},
{
"name": "webmozart/assert",
- "version": "1.11.0",
+ "version": "1.12.1",
"source": {
"type": "git",
"url": "https://github.com/webmozarts/assert.git",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
+ "reference": "9be6926d8b485f55b9229203f962b51ed377ba68"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/9be6926d8b485f55b9229203f962b51ed377ba68",
+ "reference": "9be6926d8b485f55b9229203f962b51ed377ba68",
"shasum": ""
},
"require": {
"ext-ctype": "*",
+ "ext-date": "*",
+ "ext-filter": "*",
"php": "^7.2 || ^8.0"
},
- "conflict": {
- "phpstan/phpstan": "<0.12.20",
- "vimeo/psalm": "<4.6.1 || 4.6.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5.13"
+ "suggest": {
+ "ext-intl": "",
+ "ext-simplexml": "",
+ "ext-spl": ""
},
"type": "library",
"extra": {
@@ -739,9 +739,9 @@
],
"support": {
"issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.11.0"
+ "source": "https://github.com/webmozarts/assert/tree/1.12.1"
},
- "time": "2022-06-03T18:03:27+00:00"
+ "time": "2025-10-29T15:56:20+00:00"
}
],
"packages-dev": [
@@ -1873,29 +1873,29 @@
},
{
"name": "dealerdirect/phpcodesniffer-composer-installer",
- "version": "v1.1.2",
+ "version": "v1.2.0",
"source": {
"type": "git",
"url": "https://github.com/PHPCSStandards/composer-installer.git",
- "reference": "e9cf5e4bbf7eeaf9ef5db34938942602838fc2b1"
+ "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/e9cf5e4bbf7eeaf9ef5db34938942602838fc2b1",
- "reference": "e9cf5e4bbf7eeaf9ef5db34938942602838fc2b1",
+ "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/845eb62303d2ca9b289ef216356568ccc075ffd1",
+ "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1",
"shasum": ""
},
"require": {
"composer-plugin-api": "^2.2",
"php": ">=5.4",
- "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0"
+ "squizlabs/php_codesniffer": "^3.1.0 || ^4.0"
},
"require-dev": {
"composer/composer": "^2.2",
"ext-json": "*",
"ext-zip": "*",
"php-parallel-lint/php-parallel-lint": "^1.4.0",
- "phpcompatibility/php-compatibility": "^9.0",
+ "phpcompatibility/php-compatibility": "^9.0 || ^10.0.0@dev",
"yoast/phpunit-polyfills": "^1.0"
},
"type": "composer-plugin",
@@ -1965,7 +1965,7 @@
"type": "thanks_dev"
}
],
- "time": "2025-07-17T20:45:56+00:00"
+ "time": "2025-11-11T04:32:07+00:00"
},
{
"name": "dnoegel/php-xdg-base-dir",
@@ -2567,16 +2567,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v5.6.1",
+ "version": "v5.6.2",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2"
+ "reference": "3a454ca033b9e06b63282ce19562e892747449bb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
- "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb",
+ "reference": "3a454ca033b9e06b63282ce19562e892747449bb",
"shasum": ""
},
"require": {
@@ -2619,9 +2619,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2"
},
- "time": "2025-08-13T20:13:15+00:00"
+ "time": "2025-10-21T19:32:17+00:00"
},
{
"name": "phar-io/manifest",
@@ -3300,16 +3300,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "11.5.42",
+ "version": "11.5.43",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c"
+ "reference": "c6b89b6cf4324a8b4cb86e1f5dfdd6c9e0371924"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c",
- "reference": "1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c6b89b6cf4324a8b4cb86e1f5dfdd6c9e0371924",
+ "reference": "c6b89b6cf4324a8b4cb86e1f5dfdd6c9e0371924",
"shasum": ""
},
"require": {
@@ -3381,7 +3381,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.42"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.43"
},
"funding": [
{
@@ -3405,7 +3405,7 @@
"type": "tidelift"
}
],
- "time": "2025-09-28T12:09:13+00:00"
+ "time": "2025-10-30T08:39:39+00:00"
},
{
"name": "psalm/plugin-phpunit",
@@ -4708,16 +4708,16 @@
},
{
"name": "squizlabs/php_codesniffer",
- "version": "3.13.4",
+ "version": "3.13.5",
"source": {
"type": "git",
"url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
- "reference": "ad545ea9c1b7d270ce0fc9cbfb884161cd706119"
+ "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ad545ea9c1b7d270ce0fc9cbfb884161cd706119",
- "reference": "ad545ea9c1b7d270ce0fc9cbfb884161cd706119",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4",
+ "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4",
"shasum": ""
},
"require": {
@@ -4734,11 +4734,6 @@
"bin/phpcs"
],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.x-dev"
- }
- },
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
@@ -4788,7 +4783,7 @@
"type": "thanks_dev"
}
],
- "time": "2025-09-05T05:47:09+00:00"
+ "time": "2025-11-04T16:30:35+00:00"
},
{
"name": "staabm/side-effects-detector",
@@ -4844,16 +4839,16 @@
},
{
"name": "symfony/console",
- "version": "v7.3.4",
+ "version": "v7.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db"
+ "reference": "c28ad91448f86c5f6d9d2c70f0cf68bf135f252a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
- "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
+ "url": "https://api.github.com/repos/symfony/console/zipball/c28ad91448f86c5f6d9d2c70f0cf68bf135f252a",
+ "reference": "c28ad91448f86c5f6d9d2c70f0cf68bf135f252a",
"shasum": ""
},
"require": {
@@ -4918,7 +4913,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.3.4"
+ "source": "https://github.com/symfony/console/tree/v7.3.6"
},
"funding": [
{
@@ -4938,7 +4933,7 @@
"type": "tidelift"
}
],
- "time": "2025-09-22T15:31:00+00:00"
+ "time": "2025-11-04T01:21:42+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -5009,16 +5004,16 @@
},
{
"name": "symfony/filesystem",
- "version": "v7.3.2",
+ "version": "v7.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd"
+ "reference": "e9bcfd7837928ab656276fe00464092cc9e1826a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/edcbb768a186b5c3f25d0643159a787d3e63b7fd",
- "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/e9bcfd7837928ab656276fe00464092cc9e1826a",
+ "reference": "e9bcfd7837928ab656276fe00464092cc9e1826a",
"shasum": ""
},
"require": {
@@ -5055,7 +5050,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v7.3.2"
+ "source": "https://github.com/symfony/filesystem/tree/v7.3.6"
},
"funding": [
{
@@ -5075,7 +5070,7 @@
"type": "tidelift"
}
],
- "time": "2025-07-07T08:17:47+00:00"
+ "time": "2025-11-05T09:52:27+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -5494,16 +5489,16 @@
},
{
"name": "symfony/service-contracts",
- "version": "v3.6.0",
+ "version": "v3.6.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4"
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
- "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43",
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43",
"shasum": ""
},
"require": {
@@ -5557,7 +5552,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.6.0"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.6.1"
},
"funding": [
{
@@ -5568,12 +5563,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-25T09:37:31+00:00"
+ "time": "2025-07-15T11:30:57+00:00"
},
{
"name": "symfony/string",
diff --git a/phpcs.xml.dist b/phpcs.xml.dist
index e47eae9..2b331fa 100644
--- a/phpcs.xml.dist
+++ b/phpcs.xml.dist
@@ -12,6 +12,7 @@
+ resources
src
test
*/test/TestAsset/plates.php
diff --git a/resources/Mezzio/Template/TemplatePath.php b/resources/Mezzio/Template/TemplatePath.php
new file mode 100644
index 0000000..6f00848
--- /dev/null
+++ b/resources/Mezzio/Template/TemplatePath.php
@@ -0,0 +1,48 @@
+path;
+ }
+
+ /**
+ * Get the namespace
+ */
+ public function getNamespace(): ?string
+ {
+ return $this->namespace;
+ }
+
+ /**
+ * Get the path
+ */
+ public function getPath(): string
+ {
+ return $this->path;
+ }
+ }
+}
diff --git a/src/Extension/EscaperExtension.php b/src/Extension/EscaperExtension.php
index a80dfe1..c47c636 100644
--- a/src/Extension/EscaperExtension.php
+++ b/src/Extension/EscaperExtension.php
@@ -7,6 +7,7 @@
use Laminas\Escaper\Escaper;
use League\Plates\Engine;
use League\Plates\Extension\ExtensionInterface;
+use Override;
/** @final */
class EscaperExtension implements ExtensionInterface
@@ -30,6 +31,7 @@ public function __construct(?string $encoding = null)
* - escapeCss($string) : string
* - escapeUrl($string) : string
*/
+ #[Override]
public function register(Engine $engine): void
{
$engine->registerFunction('escapeHtml', [$this->escaper, 'escapeHtml']);
diff --git a/src/Extension/UrlExtension.php b/src/Extension/UrlExtension.php
index c5383a7..7d5b161 100644
--- a/src/Extension/UrlExtension.php
+++ b/src/Extension/UrlExtension.php
@@ -10,6 +10,7 @@
use Mezzio\Helper\UrlHelper;
use Mezzio\Helper\UrlHelperInterface;
use Mezzio\Router\RouteResult;
+use Override;
/**
* @psalm-import-type UrlGeneratorOptions from UrlHelperInterface
@@ -31,6 +32,7 @@ public function __construct(
* - url($route = null, array $params = []) : string
* - serverurl($path = null) : string
*/
+ #[Override]
public function register(Engine $engine): void
{
$engine->registerFunction('url', $this->urlHelper);
diff --git a/src/PlatesRenderer.php b/src/PlatesRenderer.php
index 5500bbf..8d02a98 100644
--- a/src/PlatesRenderer.php
+++ b/src/PlatesRenderer.php
@@ -10,6 +10,7 @@
use Mezzio\Template\Exception;
use Mezzio\Template\TemplatePath;
use Mezzio\Template\TemplateRendererInterface;
+use Override;
use ReflectionProperty;
use function get_debug_type;
@@ -41,6 +42,7 @@ public function __construct(?Engine $template = null)
/**
* {@inheritDoc}
*/
+ #[Override]
public function render(string $name, $params = []): string
{
$params = $this->normalizeParams($params);
@@ -90,6 +92,7 @@ public function getPaths(): array
*
* {@inheritDoc}
*/
+ #[Override]
public function addDefaultParam(string $templateName, string $param, mixed $value): void
{
if ('' === trim($templateName)) {