是否有与 PHP 中新的 ASP.NET razor 语法等效的方法?
8 回答
感谢 @mindplay.dk 链接到 Yii 框架的 Razor 视图渲染器!如果您正在寻找一个独立的 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$
而不是 a @
。
它被称为Node 的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文件)
请记住,这并未在生产环境中进行全面测试。
似乎有人做到了:https ://github.com/steffans/razr
但我仍然会转换为 Twig,它更强大。