PHP の新しい ASP.NET カミソリ構文に相当するものはありますか?
8 に答える
Yii フレームワークの Razor View Renderer にリンクしてくれた @mindplay.dk に感謝します。PHP 用のスタンドアロン テンプレート エンジンを探している場合の代替手段として、最近見つけたTwig ( http://www.twig-project.org/ )を共有したいと思います。これは Razor 構文ではありませんが、シンプルで拡張可能です。
サイトからのいくつかの例を次に示します。
ごとに:
{% for user in users %}
* {{ user.name }}
{% else %}
No user has been found.
{% endfor %}
ブロックと継承:
{% extends "layout.html" %}
{% block content %}
Content of the page...
{% endblock %}
フィルター:
{{ "now"|date("m/d/Y") }}
{{ "I like %s and %s."|format(foo, "bar") }}
returns: I like foo and bar. (if the foo parameter equals to the foo string)
私はまだこのエンジンで予備的な開発とテストを行っていますが、今のところ気に入っています!
Yii フレームワークには Razor のようなビュー エンジンがあります。
http://www.yiiframework.com/extension/razorviewrenderer
これは非常に単純です。実際の Yii 依存関係はないようです。そのため、これを Yii から取り出して別のコンテキストで使用するのが非常に難しいとは思えません。
これは単なる Razor スタイルのテンプレート パーサーです。Razor スタイルのテンプレートをプレーンなバニラ PHP スクリプトにコンパイルします。実際のビューエンジンは Yii に依存しています。
Laravel の Blade テンプレート エンジンは、Razor と同様の構文を使用します。https://laravel.com/docs/master/blade
最も近いのはFat-Free Frameworkのテンプレート エンジンの内部ですが、中かっこを使用する必要があります。PHP の冗長<?php echo $x['y']['z']; ?>
または短い tag-equivalentの代わりに<?=$x['y']['z']?>
、Fat-Free は以下を使用します。{@x.y.z}
「Razor 構文」を調べる必要がありましたが、ASP.NET には十分に適しているようです。PHP では、ある種のテンプレート フレームワーク (私は通常、自分自身でSmartyを使用します) を適用して、最小限の制御構造と変数参照だけで見栄えの良い HTML ページを取得します。
PHP が似ている唯一の Razor に似た構文は、「変数展開」と呼ばれるものだけです。
$two = "Two";
echo "One $two Three";
結果:
One Two Three
ただし、これを PHP ブロックの外側または二重文字列の外側で使用することはできません (少なくとも、それをどのように使用したいかではありません)。これは機能しません:
<?php
$two = "Two";
?>
<p>One $two Three</p>
結果:
<p>One $two Three</p>
PHP ブロックの外側にある他の PHP プログラミング構造も同様に何もしません。したがって、このようなものはどれも PHP で並列化されていません: http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx
私は実際にまさにそれを行うプロジェクトに取り組んでいます!$
の代わりに a を使用するだけ@
です。
ノードのPhazorと呼ばれます。
インストールするだけnpm i phazor -g
<head>
/* Phazor comments inside html */
${
// Vanilla PHP inside ${ }
$title = "I love fruit";
$isFruit = true;
}
/* An echo expression */
<title>$(ucwords($title))</title>
</head>
<body>
/* Variable expression */
<h1>$title.</h1>
/* Inline statement */
$if ($isFruit) {
<p>It sure is great!</p>
}
</body>
次に実行するphazor sourceFolder destinationFolder
と、すべての phazor .phファイルが宛先フォルダーにコンパイルされます。(フォルダ内の TypeScript と SASS ファイルをコンパイルすることもできます)
これは本番環境で完全にテストされていないことに注意してください。