Skip to content

[6.x] Twig TemplateResolver#18439

Merged
brandonkelly merged 11 commits into6.xfrom
feature/twig-template-resolver
Feb 17, 2026
Merged

[6.x] Twig TemplateResolver#18439
brandonkelly merged 11 commits into6.xfrom
feature/twig-template-resolver

Conversation

@riasvdv
Copy link
Contributor

@riasvdv riasvdv commented Feb 17, 2026

No description provided.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Introduces a new Twig TemplateResolver/TemplateLoader implementation and migrates legacy Yii2-adapter and CMS code to use it, aiming to centralize template path resolution and loader behavior in 6.x.

Changes:

  • Added CraftCms\Cms\Twig\TemplateResolver, TemplateLoader, and TemplateLoaderException, plus unit tests for both resolver and loader behavior.
  • Updated multiple legacy Yii2-adapter call sites to use TemplateResolver (instead of View::resolveTemplate() / doesTemplateExist()) and updated exception references.
  • Renamed/moved the Twig view engine integration (TwigEngine) and updated service providers and exception mapping (TwigExceptionMapper).

Reviewed changes

Copilot reviewed 25 out of 25 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
yii2-adapter/tests/unit/helpers/CpHelperTest.php Updates exception import to new TemplateLoaderException namespace.
yii2-adapter/legacy/web/twig/variables/Cp.php Updates throws docblocks / imports for new Twig exception and event class usage.
yii2-adapter/legacy/web/twig/TemplateLoaderException.php Deprecates legacy exception class via alias to new exception.
yii2-adapter/legacy/web/twig/TemplateLoader.php Deprecates legacy loader class via alias (intended).
yii2-adapter/legacy/web/View.php Switches template resolution/existence to TemplateResolver and updates Twig loader import.
yii2-adapter/legacy/web/UrlManager.php Uses TemplateResolver to detect public template paths.
yii2-adapter/legacy/web/TemplateResponseFormatter.php Uses TemplateResolver to resolve template path for MIME type detection.
yii2-adapter/legacy/validators/TemplateValidator.php Uses TemplateResolver to validate template existence.
yii2-adapter/legacy/services/Categories.php Uses TemplateResolver for category group template validation.
yii2-adapter/legacy/helpers/Template.php Renames mapper reference to TwigExceptionMapper.
yii2-adapter/legacy/helpers/Cp.php Updates exception type references to new TemplateLoaderException.
yii2-adapter/legacy/controllers/TemplatesController.php Uses TemplateResolver for template existence checks (render/offline/error).
tests/Unit/Twig/TemplateResolverTest.php Adds coverage for resolver normalization, roots, modes, caching, and security checks.
tests/Unit/Twig/TemplateLoaderTest.php Adds coverage for loader interface methods, error cases, and freshness logic.
src/View/ViewServiceProvider.php Registers Twig view engine via TwigEngine.
src/View/TwigEngine.php Moves/renames Twig engine integration class into CraftCms\Cms\View.
src/Twig/TwigServiceProvider.php Updates exception handler mapping to TwigExceptionMapper.
src/Twig/TwigExceptionMapper.php Renames TwigMapper to TwigExceptionMapper.
src/Twig/TemplateResolver.php Adds new request-scoped template resolution service.
src/Twig/TemplateLoader.php Adds new Twig loader implementation backed by TemplateResolver.
src/Twig/Exceptions/TemplateLoaderException.php Adds new exception type that carries a template name.
src/Http/Controllers/Users/PhotoController.php Uses TemplateResolver for template existence check.
src/Element/Concerns/Renderable.php Uses TemplateResolver for site template existence checks.
src/Deprecator/Deprecator.php Uses TemplateResolver to resolve Twig template names to paths.
src/Console/Commands/Twig/TwigCacheCommand.php Updates exception import to new TemplateLoaderException.
Comments suppressed due to low confidence (1)

yii2-adapter/legacy/web/twig/TemplateLoader.php:20

  • class_alias() is aliasing \CraftCms\Cms\Twig\Exceptions\TemplateLoaderException to TemplateLoader, which will make craft\web\twig\TemplateLoader point to an exception class at runtime. This should alias the new loader class (e.g. \CraftCms\Cms\Twig\TemplateLoader) instead; otherwise any code referencing/instantiating TemplateLoader will break immediately.

class_alias(\CraftCms\Cms\Twig\Exceptions\TemplateLoaderException::class, TemplateLoader::class);


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@riasvdv riasvdv marked this pull request as ready for review February 17, 2026 12:25
@riasvdv riasvdv requested a review from brandonkelly February 17, 2026 12:25
@brandonkelly brandonkelly merged commit 855ffce into 6.x Feb 17, 2026
12 checks passed
@brandonkelly brandonkelly deleted the feature/twig-template-resolver branch February 17, 2026 14:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants