本文概述
- A.使用项目的环境
- B.使用隔离的环境
命令内的模板引擎最典型的用法是动态显示电子邮件模板。在本文中, 我们将向你解释如何在symfony命令中请求模板引擎服务或如何在隔离的Twig环境中工作。
A.使用项目的环境默认情况下, 你可能希望坚持使用项目中经过常规配置的Twig环境, 因此可以在视图中访问路由方法({{path(” some_route” )}})和app变量。与隔离环境的选项相比, 这也是最简单的方法, 你只需导入Twig \ Environment命名空间并将类注入构造函数中, 即可通过私有变量将其暴露给类。然后, 你将能够从类中的$ this-> twig变量调用render方法, 如以下示例所示:
<
?php// src/Command/MyCommand.phpnamespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
// Import the Twig Environmentuse Twig\Environment;
class MyCommand extends Command{// the name of the command (the part after "bin/console")protected static $defaultName = 'app:my-command';
// Create a private variable to store the twig environmentprivate $twig;
public function __construct(Environment $twig){// Inject it in the constructor and update the value on the class$this->
twig = $twig;
parent::__construct();
}protected function configure(){}protected function execute(InputInterface $input, OutputInterface $output){// Render some template inside the project/templates/emails/example.html.twig$html = $this->
twig->
render('emails/example.html.twig', ['someVariable' =>
123]);
// Preview HTML in the terminal$output->
writeln($html);
return 0;
}}
B.使用隔离的环境现在, 如果你想使用全新的Twig环境, 则需要执行一些额外的步骤。如上所述, 你需要考虑使用此选项就像使用Twig环境, 该环境与项目本身无关, 因为你无法访问路由等。首先, 创建一个服务Twig将加载项目的根目录:
<
?php// src/Service/Twig.phpnamespace App\Service;
use Symfony\Component\HttpKernel\KernelInterface;
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
class Twig extends Environment {public function __construct(KernelInterface $kernel) {$loader = new FilesystemLoader("templates", $kernel->
getProjectDir());
parent::__construct($loader);
}}
然后, 我们将通过构造函数将该服务注入命令中, 与第一个选项不同, 与其直接从树枝环境中渲染模板, 不如直接加载模板, 然后调用render方法, 首先直接提供参数参数(如果有):
<
?php// src/Command/MyCommand.phpnamespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
// Import the Twig Environment from the created serviceuse App\Service\Twig;
class MyCommand extends Command{// the name of the command (the part after "bin/console")protected static $defaultName = 'app:my-command';
// Create a private variable to store the twig environmentprivate $twig;
public function __construct(Twig $twig){// Inject it in the constructor and update the value on the class$this->
twig = $twig;
parent::__construct();
}protected function configure(){}protected function execute(InputInterface $input, OutputInterface $output){// Load Twig File$template = $this->
twig->
load('emails/example.html.twig');
// Render HTML$html = $template->
render(['someVariable' =>
123]);
// Preview HTML in the terminal$output->
writeln($html);
return 0;
}}
【如何在Symfony 5中的命令内部渲染Twig视图】编码愉快??!
推荐阅读
- 如何在Symfony 4命令中从dotenv文件vars中检索值
- MySQL 索引管理及执行计划
- InnoDB 表空间
- 浅入浅出 MySQL 索引
- ArcGIS10.7连接Windows下HGDB5.6.5
- 探究Presto SQL引擎-巧用Antlr
- sqlserver登录名及角色权限的那些事
- 简单了解 MySQL 中相关的锁
- 超硬核学习手册系列3事务视图篇——深入浅出MySQL的知识点,学习收藏必备