Symfony 3.4按文档配置运行时Twig扩展却无法加载,求排查
Alright, let's dig into why your lazy-loaded Twig extension isn't working in Symfony 3.4. I've gone through your code snippets, and there are a few key issues preventing the extension from loading correctly. Let's fix them step by step:
1. You Forgot to Register Your Twig Extension as a Service
You created the AppExtension class, but Symfony doesn't know about it yet—you need to register it as a service with the twig.extension tag so Twig recognizes it.
Add this to your src/PlotlyBundle/Resources/config/services.yml:
services: # Keep your existing runtime service plotly.twig_runtime: class: PlotlyBundle\Twig\AppRuntime public: true tags: - { name: twig.runtime } # Add this new service for your extension plotly.twig_extension: class: PlotlyBundle\Twig\AppExtension public: true tags: - { name: twig.extension }
2. Incorrect Twig Function Definition for Lazy Runtime
Your current getFunctions() method tries to call biDraw() as a static method, but lazy-loaded runtimes need explicit configuration to tell Twig to resolve the service instead.
Update your src/PlotlyBundle/Twig/AppExtension.php:
<?php namespace PlotlyBundle\Twig; use PlotlyBundle\Twig\AppRuntime; class AppExtension extends \Twig_Extension { public function getFunctions() { return [ new \Twig_SimpleFunction( 'bi_draw', [AppRuntime::class, 'biDraw'], ['runtime' => true] // This flag tells Twig to use the lazy runtime ), ]; } // Optional but helpful for debugging: Give your extension a name public function getName() { return 'plotly_app_extension'; } }
The 'runtime' => true flag is critical here—it tells Twig to lazily load your AppRuntime service when the function is called.
3. Remove Unnecessary Runtime Fetch in Your Controller
You don't need to manually fetch the runtime service in your controller—Twig handles that automatically when you call the function in your template. Delete this line from src/AppBundle/Controller/DashboardController.php:
// Remove this line, it's not needed // $twig = $this->get('plotly.twig_runtime');
4. Clear Your Symfony Cache
Old cached configurations can often cause issues like this. Clear the cache to make sure your new service definitions are picked up:
php bin/console cache:clear
After making these changes, your bi_draw() Twig function should render the 'awesome text here' output as expected.
内容的提问来源于stack exchange,提问作者numediaweb

