noadek / twiggy
适用于Laravel的Twig模板引擎实现。允许您在不替换Laravel 5默认blade模板引擎的情况下使用twig
Requires
- php: >=5.4
- twig/twig: ^1.0
Requires (Dev)
- laravel/framework: 5.3.*
This package is not auto-updated.
Last update: 2024-09-28 20:03:34 UTC
README
允许您在不替换Laravel 5默认blade模板引擎的情况下使用Twig。基于Edmundas Kondrašovas的Twiggy for CodeIgniter
要求
Twiggy需要Laravel 5。
安装
使用Composer安装此包
composer require noadek/twiggy
快速入门
Composer安装或更新完您的包后,您需要将Twiggy与Laravel本身进行注册。打开config/app.php文件,找到文件末尾的providers键,并添加Twiggy Service Provider到末尾
'providers' => [ ... Twiggy\Provider\TwiggyServiceProvider::class, ],
现在我们将使用Artisan添加新的twig配置文件
php artisan vendor:publish --provider="Twiggy\Provider\TwiggyServiceProvider"
配置
使用php artisan vendor:publish --provider="Twiggy\Provider\TwiggyServiceProvider"
命令,您会在config目录下获得一个默认的twiggy.php配置文件。
设置目录结构
Twiggy遵循特定的主题-布局-模板结构,有助于将您的逻辑与视图分离。您可以创建多个主题和布局,并实时切换主题和布局!默认情况下,Twiggy将在服务器根目录的themes文件夹中查找您的twig文件(您可以在config/twiggy.php文件中更改此设置)。因此,您应该创建以下目录和文件。
-
创建目录结构
+-{LARAVELAPP}/ | +-app/ ... | +-themes/ | | +-default/ | | | +-layouts/
-
创建一个默认布局
index.twig
并将其放在layouts文件夹中<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <!--[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <title>Default layout</title> </head> <body> {% block content %} {% endblock %} </body> </html>
-
在default主题文件夹的根目录创建一个默认模板文件
index.twig
{% extends _layout %} {% block content %} Default template file. {% endblock %}
-
您的结构最终应该像这样
+-{LARAVELAPP}/ | +-themes/ | | +-default/ | | | +-layouts/ | | | | +-index.twig | | | +-index.twig
用法
至此,您现在可以开始使用twig了。Twiggy基本上为您提供了一些视图或模板设置的辅助函数。
您可以使用twig()辅助函数调用twig模板,就像调用视图一样。
//app/Http/routes.php //twig template themes/hello.twig Route::get('/', function () { return twig('hello'); });
Twiggy还提供了一些其他有用的辅助函数,用于构建视图的主题-布局-模板结构。
设置主题
默认twiggy主题是'default'。这可以在config/twiggy.php文件中更改。要创建一个新的主题,在themes文件夹中添加一个带有所需主题名称的新文件夹。
实时设置主题
<?php ... setTheme('default');
'default'可以更改为您创建的任何其他主题。如果您想构建一个类似于CMS的系统,这可以被操作来自数据库,以便系统的用户可以更改主题。
设置布局
不同的页面可能需要不同的布局,这取决于您的应用程序的结构和设计。Twiggy允许您像您想要的设置和切换布局。请看下面的例子
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class PagesController extends Controller { public function __construct() { setTheme('default'); setLayout('index'); } public function index() { $name = 'I am Twiggy'; return twig('index', compact('name')); } public function test() { setLayout('blog'); return twig('post'); } }
在这个例子中,首页将使用'default'主题和'index'布局来显示'index'模板。另一方面,测试页面将使用'default'主题,但使用'blog'布局来显示'post'模板。
设置页面标题
Twiggy提供了三个函数来构建页面标题。根据您的SEO技术,可以使用这些函数。'setPageTitle'函数设置页面的标题,'appendPageTitle'在设置的标题后添加指定的字符串,而'prependPageTitle'在设置的标题前添加指定的字符串。
无论是'appendPageTitle'还是'prependPageTitle',都会使用config/twiggy.php文件中的'stitle_separator'来分隔标题。
让我们为之前的例子添加一个页面标题。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class PagesController extends Controller { public function __construct() { setTheme('default'); setLayout('index'); setPageTitle('Pages'); } public function index() { appendPageTitle('About Me'); $name = 'I am Twiggy'; return twig('index', compact('name')); } ... }
为此,将index.twig布局文件中的<title>Default layout</title>
替换为<title>{{ title }}</title>
在此,索引页面将显示标题“页面 | 关于我”。这也可以通过
setPageTitle('Pages', 'About Me');
设置页面元数据来实现。
Twiggy提供了一个名为'setPageMeta'的函数,用于设置动态元标签。这可以用于设置Facebook、Twitter等的Open Graph标记。它还可以用于设置Google站点验证元标签和其他动态元标签。
让我们用元标签更新我们的示例
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class PagesController extends Controller { public function __construct() { setTheme('default'); setLayout('index'); setPageTitle('Pages'); } public function index() { appendPageTitle('About Me'); setMetatag('description', 'This is all you need to know about twiggy'); setMetatag('og:url', url('images/me.jpg'), 'property'); $name = 'I am Twiggy'; return twig('index', compact('name')); } ... }
要使此功能正常工作,我们必须将{{ meta }}
变量添加到布局中
...
<head>
<meta charset="utf-8">
{{ meta }}
...
</head>
注册函数和过滤器
Twig是沙箱化的。默认情况下,您不能直接使用任何PHP函数,您不能访问给定上下文之外的内容,您也不能在模板中使用纯PHP。这是出于设计考虑,它强制您将业务逻辑与模板分离。
然而,您可以通过在config/twiggy.php文件中分别添加到'register_functions'和'register_filter'数组中所需函数和过滤器,来指定在模板中允许使用的一组PHP函数/过滤器,如下所示:
"register_functions" => [ 'date', 'phpversion', 'foo' ],
这告诉Twiggy注册'日期'、'phpversion'和一个名为'foo'的自定义函数。
创建自定义函数
在Laravel中,可以通过多种方式创建自定义函数或过滤器。您总是可以找到更干净的方法来做这件事,但这里是一种使用ServiceProvider的方法:
class AppServiceProvider extends ServiceProvider { protected $defer = true; public function boot() { $this->registerHelper(); } private function registerHelper() { require app_path(Lib/helpers.php'); } }
创建包含您自定义函数和过滤器的辅助文件。
+-{APPPATH}/
| +-Lib/
| | +-helpers.php
最后,将服务提供商添加到config/app.php文件中。