【PHP】Twig 综述
由于在业务中使用twig,我花了不少功夫来查找信息,因此整理了一个命令列表。
※ 由于我注意到仍然有相当多的人查看,如果有推荐的命令,请提出编辑请求,我会尽快反映。
twig 是什么PHP制作的模板引擎。
安装和初步设置可以在以下文章中找到总结:
https://qiita.com/atwata/items/50e84e14b107dd111d71
https://qiita.com/tomk79/items/5ab61b4b24fb80fe8a90
1.大家
安装(使用twigbridge)环境:Laravel 5.5
安装(使用twigbridge)环境:Laravel 5.5
GitHub – rcrowe/TwigBridge: 将Twig的力量赋予Laravel
如果已经使用了Laravel,只需按照TwigBridge官方的说明执行即可简单完成!由于这是英文,我会提供一些额外的解释。
用Composer进行安装
composer require rcrowe/twigbridge
composer require rcrowe/twigbridge
如果已经安装了composer,您可以使用该命令进行安装。
快速入门首先,我们需要编辑config目录下的app.php文件的两个位置。
'providers' => [
...
/*
* Package Service Providers...//Laravelに登録する
*/
TwigBridge\ServiceProvider::class,
],
...
'aliases' => [
...
/* Package Aliase */ //Twigという名前で簡単に呼び出せるようにする
'Twig' => TwigBridge\Facade\Twig::class,
],
'providers' => [
...
/*
* Package Service Providers...//Laravelに登録する
*/
TwigBridge\ServiceProvider::class,
],
...
'aliases' => [
...
/* Package Aliase */ //Twigという名前で簡単に呼び出せるようにする
'Twig' => TwigBridge\Facade\Twig::class,
],
由于已经完成注册,最后使用artisan命令将twig的配置文件添加进去。
php artisan vendor:publish --provider="TwigBridge\ServiceProvider"
这样就准备工作结束了。
只要在resouse/view目录下创建一个以.twig为扩展名的文件,就可以使用twig格式进行编写。
我将默认的layouts文件夹放在其中,并通过继承这些文件来使用。
继承
{% extends 'ファイルパス' %}
-
別ファイルから継承する(複数はNG)
{% extends 'ファイルパス' %}
- 別ファイルから継承する(複数はNG)
-
- 親ブロックを子ブロックが上書きする
- {% block ブロック名%}〜{% endblock %}
插入
{% include 'ファイルパス'%}
{% include 'aa/aa' with { 'aa' : 'aa' } %} //引数も取れます
留言
{# ここにコメントを書く#}
跨站请求伪造防护措施
{{ csrf_field() }}
HTML文的转义感谢您的提醒,我已进行补充!
{% include 'ファイルパス'%}
{% include 'aa/aa' with { 'aa' : 'aa' } %} //引数も取れます
{# ここにコメントを書く#}
跨站请求伪造防护措施
{{ csrf_field() }}
HTML文的转义感谢您的提醒,我已进行补充!
{{ csrf_field() }}
其他
{{ 変数 | length }} //文字数
{{ dump() }} //PHPのdumpと一緒
2. 变量写作方式 (xiě zuò shì)
{{ 変数名 }}
{{ 変数名 }}
※需要注意的是,在条件语句中不需要{{}}(例如:{% if post=”hello” %})
定义的方式
在同一个Twig模板中进行设置
{% set 変数名='value' %}
-
配列の場合は{% set array = [ A, B ] %}
{% set 変数名='value' %}
-
- 配列の場合は{% set array = [ A, B ] %}
- 連想配列は{% set array = [ key : value ] %}
从控制器等传递
変数:{{ 変数名 }}
配列:{{ 変数名.キー名 }} ※連想配列も可
変数:{{ 変数名 }}
配列:{{ 変数名.キー名 }} ※連想配列も可
下面是例子中的一部分内容。
$url = 'URLです';
$post = $this->post_model->getPostArray();
// 'id' => '1', 'title' => 'タイトル'
return view('post/show',
[
'url' =>$url, //変数
'post' =>$post //配列
];
<p>変数は「{{ url }}」です。</p>
<p>配列は idが{{ post.id }}で、
titleが{{ post.title }}です。</p>
输出结果
変数は「URLです」です。
配列は idが1で、titleがタイトルです。
其他在处理验证错误等固定变量时的书写方式。
input_old('タグの名前') // セッションなどで確認フォーム利用時
errors.first('タグの名前') //バリデーションエラー時
3. 假如 / 如果的情况下
如果的话
{% if 条件式 %}
{% endif %}
-
通常のif文が上記の書き方で使える
input_old('タグの名前') // セッションなどで確認フォーム利用時
errors.first('タグの名前') //バリデーションエラー時
如果的话
{% if 条件式 %}
{% endif %}
-
通常のif文が上記の書き方で使える
{% if 条件式 %}
{% endif %}
- 通常のif文が上記の書き方で使える
-
- 条件式内で変数を定義した場合、条件文外では使用不能
-
- 条件文内では、変数に{{}}はつけない
- else文、elseif文、複数条件の場合はandやorも使用可能
{% if 条件式A and 条件式B %}
{% elseif 条件式 %}
{% else %}
{% endif %}
for循环
{% for i = 1 1..100 %}
{% endfor %}
-
iは任意です
{% for i = 1 1..100 %}
{% endfor %}
- iは任意です
- 連想配列の場合は{% for key, value in 配列名 %}
for循环(用for in来替代)
{% for hoge in array %}
{% endfor %}
arrayに任意の配列、hogeも任意の名前です
三个操作符
{{ 条件文 ? 処理A : 処理B }}
条件文が正の時にA、誤の時B
请模仿以下的例子用汉语母语改写:
使用模板和变量的页面
{% extends 'layout/user_default'%}
{% block content %}
{% set title='hello' %}
<div class="sample">
<h1>{{ title }}</h1>
</div>
{% endblock %}
{% for hoge in array %}
{% endfor %}
{{ 条件文 ? 処理A : 処理B }}
- 条件文が正の時にA、誤の時B
请模仿以下的例子用汉语母语改写:
使用模板和变量的页面
{% extends 'layout/user_default'%}
{% block content %}
{% set title='hello' %}
<div class="sample">
<h1>{{ title }}</h1>
</div>
{% endblock %}
{% extends 'layout/user_default'%}
{% block content %}
{% set title='hello' %}
<div class="sample">
<h1>{{ title }}</h1>
</div>
{% endblock %}
请用中文以本地语言改述以下内容,只需提供一个选项:
“Can you help me with this task?”
邮件表单(部分内容)
<div class="form-group">
<label for="f-email">Email address</label>
<input type="email" name="email" class="form-control" id="f-mail"
value="{{input_old('email')}}" placeholder="entry@leverages.jp">
{% if errors.first('email')|length > 0 %}
<span class="text-danger">{{errors.first('email')}}</span>
{% endif %}
</div>
<div class="form-group">
<label for="f-email">Email address</label>
<input type="email" name="email" class="form-control" id="f-mail"
value="{{input_old('email')}}" placeholder="entry@leverages.jp">
{% if errors.first('email')|length > 0 %}
<span class="text-danger">{{errors.first('email')}}</span>
{% endif %}
</div>
请用中文重述以下内容,只需一个选项就可以:
“I am going to the store to buy some groceries.”