jakharbek / yii-twig
Yii 框架 Twig 扩展
dev-master / 3.0.x-dev
2020-05-10 11:21 UTC
Requires
- twig/twig: ^3.0
- yiisoft/strings: ^3.0@dev
- yiisoft/view: ^3.0@dev
- yiisoft/yii-core: ^3.0@dev
- yiisoft/yii-web: ^3.0@dev
Requires (Dev)
- hiqdev/composer-config-plugin: ^1.0@dev
- phpunit/phpunit: ^7.3
- yiisoft/cache: ^3.0@dev
- yiisoft/di: ^3.0@dev
- yiisoft/log: ^3.0@dev
This package is not auto-updated.
Last update: 2024-09-23 15:45:25 UTC
README
Yii 框架 Twig 扩展
此扩展提供了一个 ViewRender
,允许您使用 Twig 视图模板引擎与 Yii 框架 一起使用。
有关许可信息,请查看 LICENSE 文件。
文档位于 docs/guide/README.md。
安装
安装此扩展的首选方式是通过 composer。
php composer.phar require --prefer-dist yiisoft/yii-twig
使用方法
您应该在配置中指定 twig
和 view
。
//Twig return [ //... //Twig \Twig\Environment::class => static function (Psr\Container\ContainerInterface $container) { $loader = new \Twig\Loader\FilesystemLoader($container->get(Yiisoft\Aliases\Aliases::class)->get('@views')); return new \Twig\Environment($loader, array_merge([ 'cache' =>$container->get(Yiisoft\Aliases\Aliases::class)->get('@runtime/cache/twig'), 'charset' => 'utf-8', ], [])); }, //View WebView::class => static function (Psr\Container\ContainerInterface $container) { $webView = new Yiisoft\View\WebView( $container->get(Yiisoft\Aliases\Aliases::class)->get('@views'), $container->get(Yiisoft\View\Theme::class), $container->get(Psr\EventDispatcher\EventDispatcherInterface::class), $container->get(\Psr\Log\LoggerInterface::class) ); $webView->setDefaultParameters( [ 'assetManager' => $container->get(Yiisoft\Assets\AssetManager::class), 'urlGenerator' => $container->get(Yiisoft\Router\UrlGeneratorInterface::class), ] ); $webView->setDefaultExtension('twig'); $webView->setRenderers([ 'twig' => new \Yiisoft\Yii\Twig\ViewRenderer($container) ]); $container->get(\Twig\Environment::class)->addExtension(new \Yiisoft\Yii\Twig\Extensions\Yii_Twig_Extension($container)); return $webView; }, //... ]
模板
在常规模板中存在的所有变量也都在 twig 模板中可用。
get(string id)
这是访问容器的函数,此外,在整个模板中都有一个全局变量container
。
{{ get('App\\Widget\\PerformanceMetrics').widget()|raw }}
示例
main.twig
{{ assetManager.register(['App\\Asset\\AppAsset']) }} {{ this.setCssFiles(assetManager.getCssFiles()) }} {{ this.setJsFiles(assetManager.getJsFiles()) }} {{ this.beginPage()|raw }} <!DOCTYPE html> <html lang=""> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Yii Demo (Twig)</title> {{ this.head()|raw }} </head> <body> {{ this.beginBody()|raw }} {{ get('Yiisoft\\Yii\\Bootstrap4\\NavBar').begin() .brandLabel('Yii Demo') .brandUrl(urlGenerator.generate('site/index')) .options({'class' : 'navbar navbar-light bg-light navbar-expand-sm text-white'}) .start()|raw }} {{ get('Yiisoft\\Yii\\Bootstrap4\\Nav').widget() .currentPath(currentUrl) .options({'class' : 'navbar-nav mr-auto'}) .items( [ {'label' : 'Blog', 'url' : urlGenerator.generate('blog/index')}, {'label' : 'Comments Feed', 'url' : urlGenerator.generate('blog/comment/index')}, {'label' : 'Users', 'url' : urlGenerator.generate('user/index')}, {'label' : 'Contact', 'url' : urlGenerator.generate('site/contact')}, ] )|raw }} {{ get('Yiisoft\\Yii\\Bootstrap4\\Nav').widget() .currentPath(currentUrl) .options({'class' : 'navbar-nav'}) .items( user.getId() == null ? [ {'label' : 'Login', 'url' : urlGenerator.generate('site/login')}, {'label' : 'Signup', 'url' : urlGenerator.generate('site/signup')}, ] : [ {'label' : "Logout (" ~ user.getLogin() ~ ")", 'url' : urlGenerator.generate('site/logout')}, ] )|raw }} {{ get('Yiisoft\\Yii\\Bootstrap4\\NavBar').end()|raw }} <main role="main" class="container py-4"> {{ content|raw }} </main> <footer class="container py-4"> {{ get('App\\Widget\\PerformanceMetrics').widget()|raw }} </footer> {{ this.endBody()|raw }} </body> </html> {{ this.endPage(true)|raw }}