ホームページ php教程 php手册 在Yii框架中使用PHP模板引擎Twig的例子

在Yii框架中使用PHP模板引擎Twig的例子

Jun 13, 2016 am 09:33 AM
twig yii

Twig是一款快速、安全、灵活的PHP模板引擎,它内置了许多filter和tags,并且支持模板继承,能让你用最简洁的代码来描述你的模板。他的语法和Python下的模板引擎Jinjia以及Django的模板语法都非常像。 比如我们在PHP中需要输出变量并且将其进行转义时,语法比较累赘:

复制代码 代码如下:




但是在Twig中可以这样写:

复制代码 代码如下:


{{ var }}
{{ var|escape }}
{{ var|e }}         {# shortcut to escape a variable #}


遍历数组:

复制代码 代码如下:


{% for user in users %}
  * {{ user.name }}
{% else %}
  No user has been found.
{% endfor %}

但是要在Yii Framework集成Twig就会遇到点麻烦了,官方网站中已经有能够集成Twig的方案,所以这里我也不再赘述。但是由于Twig中是不支持PHP语法的,所以在有些表达上会遇到困难,比如我们在写Form的视图时,经常会这么写:

复制代码 代码如下:


beginWidget('CActiveForm'); ?>
    Login
   


     

  •     label($model,'username'); ?>
                    textField($model,'username'); ?>

     

  •  


  •     label($model,'password'); ?>
                    passwordField($model,'password'); ?>

     

  •  


  •    

     


    error($model,'password'); ?>
endWidget(); ?>
但是这样的语法是没法在twig中表达的,所以想去扩展下Twig的功能,让他能够支持我们自定义的widget标签,然后自动解析成我们需要的代码。 总共需要两个类:TokenParser和Node,下面直接上代码:

复制代码 代码如下:


/*
 * This file is an extension of Twig.
 *
 * (c) 2010 lfyzjck
 */

/**
 * parser widget tag in Yii framework
 *
 * {% beginwidget 'CActiveForm' as form %}
 *    content of form
 * {% endwidget %}
 *
 */
class Yii_WidgetBlock_TokenParser extends Twig_TokenParser
{
    /**
     * Parses a token and returns a node.
     *
     * @param Twig_Token $token A Twig_Token instance
     *
     * @return Twig_NodeInterface A Twig_NodeInterface instance
     */
    public function parse(Twig_Token $token)
    {
        $lineno = $token->getLine();
        $stream = $this->parser->getStream();

        $name = $stream->expect(Twig_Token::STRING_TYPE);
        if($stream->test(Twig_Token::PUNCTUATION_TYPE)){
            $args = $this->parser->getExpressionParser()->parseHashExpression();
        }
        else{
            $args = new Twig_Node_Expression_Array(array(), $lineno);
        }

        $stream->expect(Twig_Token::NAME_TYPE);
        $assign = $stream->expect(Twig_Token::NAME_TYPE);
        $stream->expect(Twig_Token::BLOCK_END_TYPE);

        $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true);
        $stream->expect(Twig_Token::BLOCK_END_TYPE);

        return new Yii_Node_WidgetBlock(array(
            'alias' => $name->getValue(),
            'assign' => $assign,
        ), $body, $args, $lineno, $this->getTag());
    }

    /**
     * Gets the tag name associated with this token parser.
     *
     * @param string The tag name
     */
    public function getTag()
    {
        return 'beginwidget';
    }

    public function decideBlockEnd(Twig_Token $token)
    {
        return $token->test('endwidget');
    }
}

class Yii_Node_WidgetBlock extends Twig_Node
{
    public function __construct($attrs, Twig_NodeInterface $body, Twig_Node_Expression_Array $args = NULL, $lineno, $tag)
    {
        $attrs = array_merge(array('value' => false),$attrs);
        $nodes = array('args' => $args, 'body' => $body);
        parent::__construct($nodes, $attrs, $lineno,$tag);
    }

    public function compile(Twig_Compiler $compiler)
    {
        $compiler->addDebugInfo($this);
        $compiler->write('$context["'.$this->getAttribute('assign')->getValue().'"] = $context["this"]->beginWidget("'.$this->getAttribute('alias').'",');
        $argNode = $this->getNode('args');
        $compiler->subcompile($argNode)
                 ->raw(');')
                 ->raw("\n");

        $compiler->indent()->subcompile($this->getNode('body'));

        $compiler->raw('$context["this"]->endWidget();');
    }
}
?>


然后在Twig初始化的地方增加我们的语法解析类:

复制代码 代码如下:


$twig->addTokenParser(new Yii_WidgetBlock_TokenParser);


然后我们就可以在twig的模板里这么写了:

复制代码 代码如下:


{% beginwidget 'CActiveForm' as form %}


     

  •     {{ form.label(model, 'username') }}
        {{ form.textField(model, 'username') }}
     

  •  

  •     {{ form.label(model, 'password') }}
        {{ form.passwordField(model, 'password') }}
     


{% endwidget %}
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP で Twig を使用するにはどうすればよいですか? CakePHP で Twig を使用するにはどうすればよいですか? Jun 05, 2023 pm 07:51 PM

CakePHP で Twig を使用すると、テンプレートとビューを分離し、コードをよりモジュール化して保守しやすくすることができます。この記事では、CakePHP で Twig を使用する方法を紹介します。 1. Twig をインストールします。まずプロジェクトに Twig ライブラリをインストールします。このタスクは Composer を使用して完了できます。コンソールで次のコマンドを実行します:composerrequire "twig/twig:^2.0" このコマンドはプロジェクトのベンダーに表示されます。

Web 開発のために PHP で Twig テンプレート エンジンを使用する方法 Web 開発のために PHP で Twig テンプレート エンジンを使用する方法 Jun 25, 2023 pm 04:03 PM

Web 開発テクノロジーの継続的な発展に伴い、Web アプリケーションを開発するためのより柔軟で効率的なテンプレート エンジンを求める開発者が増えています。中でもTwigは非常に優秀で人気のあるPHPテンプレートエンジンで、Symfonyフレームワークをベースに開発されており、無制限の拡張をサポートしており、複雑なWebアプリケーションの構築に非常に適しています。この記事では、PHP での Web 開発に Twig テンプレート エンジンを使用する方法を紹介します。 1. Twig テンプレート エンジンの紹介 Twig は FabienPoten によって開発されました。

PHP8.0のテンプレートライブラリ: Twig PHP8.0のテンプレートライブラリ: Twig May 14, 2023 am 08:40 AM

PHP8.0のテンプレートライブラリ: TwigTwigは、現在PHP Webアプリケーションで広く使用されているテンプレートライブラリであり、高い可読性、使いやすさ、強力な拡張性の特徴を持っています。 Twig はシンプルで理解しやすい構文を使用しており、Web 開発者が HTML、XML、JSON、その他のテキスト形式を明確かつ整然とした方法で整理して出力するのに役立ちます。この記事では、Twig の基本的な構文と機能、および PHP8.0 での Twig の使用方法を紹介します。 Twig の基本的な構文は P と似ています。

Twig と Timber の画像、メニュー、ユーザーを使用して WordPress 開発をすぐに開始できます Twig と Timber の画像、メニュー、ユーザーを使用して WordPress 開発をすぐに開始できます Sep 04, 2023 pm 03:37 PM

ここまでで、モジュール式 WordPress テーマを構築しながら Timber で Twig を使用する基本概念を学習しました。また、DRY 原則に基づいた Twig を使用したブロックのネストと多重継承についても研究しました。今日は、Twig と Timber プラグインを使用して、テーマ内の添付画像、WordPress メニュー、およびユーザーを表示する方法を検討します。木の画像 画像は WordPress テーマの重要な要素の 1 つです。通常の WordPress コーディングの実践では、画像は通常の HTML 画像タグ内で PHP と統合されます。ただし、Timber は、モジュール式でクリーンな img (イメージ) タグを処理するためのかなり包括的なアプローチを提供します。

PHP フレームワーク Yii を使用して可用性の高いクラウド バックアップ システムを開発する方法 PHP フレームワーク Yii を使用して可用性の高いクラウド バックアップ システムを開発する方法 Jun 27, 2023 am 09:04 AM

クラウド コンピューティング テクノロジの継続的な発展により、データのバックアップはすべての企業が行う必要のあるものになりました。この文脈では、可用性の高いクラウド バックアップ システムを開発することが特に重要です。 PHP フレームワーク Yii は、開発者が高性能の Web アプリケーションを迅速に構築できる強力なフレームワークです。ここでは、Yii フレームワークを使用して可用性の高いクラウド バックアップ システムを開発する方法を紹介します。データベースモデルの設計 Yii フレームワークでは、データベースモデルは非常に重要な部分です。データ バックアップ システムには多くのテーブルとリレーションシップが必要なため、

Symfony と Yii2: 大規模な Web アプリケーションの開発にはどちらのフレームワークが適していますか? Symfony と Yii2: 大規模な Web アプリケーションの開発にはどちらのフレームワークが適していますか? Jun 19, 2023 am 10:57 AM

Web アプリケーションの需要が高まるにつれ、開発者が開発フレームワークを選択する選択肢はますます増えています。 PHP フレームワークとして人気のある Symfony と Yii2 は、どちらも強力な機能とパフォーマンスを備えていますが、大規模な Web アプリケーションを開発する必要がある場合、どちらのフレームワークがより適しているのでしょうか。次に、より良い選択を行うために、Symphony と Yii2 の比較分析を行います。基本概要 Symphony は、PHP で書かれたオープンソースの Web アプリケーション フレームワークであり、上に構築されています。

Yii フレームワークでのデータクエリ: データに効率的にアクセスする Yii フレームワークでのデータクエリ: データに効率的にアクセスする Jun 21, 2023 am 11:22 AM

Yii フレームワークは、Web アプリケーション開発のプロセスを簡素化するための多数のツールとコンポーネントを提供するオープンソースの PHP Web アプリケーション フレームワークであり、その重要なコンポーネントの 1 つがデータ クエリです。 Yii フレームワークでは、SQL に似た構文を使用してデータベースにアクセスし、データを効率的にクエリおよび操作できます。 Yii フレームワークのクエリビルダーには主に次の種類があります: ActiveRecord クエリ、QueryBuilder クエリ、コマンド クエリ、独自の SQL クエリ

PHP での高度なスキニング: Twig の使用方法 PHP での高度なスキニング: Twig の使用方法 Jun 19, 2023 pm 04:03 PM

Web 開発では、ページのプレゼンテーションが非常に重要です。 PHP 開発者にとって、動的な Web サイトを開発する場合、多数の HTML タグと PHP コードに行き詰まりがちです。スタイルやレイアウトを変更する必要があると、コードを何度も変更する必要があり、維持に非常にコストがかかります。この問題を解決するために、最新の PHP フレームワークは通常、テンプレート エンジンを提供します。その中でも、Twig は最も人気のあるテンプレート エンジンの 1 つです。この記事では、PHP に Twig を使用する方法とその理由について説明します。

See all articles