18

是否有与 PHP 中新的 ASP.NET razor 语法等效的方法?

4

8 回答 8

7

感谢 @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)

我还在用这个引擎做一些初步的开发和测试,到目前为止我很喜欢它!

于 2011-04-15T06:46:55.587 回答
5

Yii 框架有一个类似 Razor 的视图引擎:

http://www.yiiframework.com/extension/razorviewrenderer

这很简单——它似乎没有任何真正的 Yii 依赖项,所以我无法想象将它从 Yii 中提取出来并在不同的上下文中使用它会非常困难。

请注意,这只是一个 Razor 样式的模板解析器——它将 Razor 样式的模板编译成普通的 PHP 脚本。它依赖于 Yii 作为实际的视图引擎。

于 2010-10-23T22:54:05.593 回答
4

Laravel 的 Blade 模板引擎,使用与 Razor 类似的语法。https://laravel.com/docs/master/blade

于 2016-09-07T11:09:49.100 回答
2

您会发现最接近的是Fat-Free Framework的模板引擎,但它要求您使用花括号。代替 PHP 的冗长<?php echo $x['y']['z']; ?>或简短的 tag-equivalent <?=$x['y']['z']?>,Fat-Free 使用{@x.y.z}

于 2010-09-05T14:05:49.637 回答
1

我只需要查看“Razor 语法”,它对于 ASP.NET 来说似乎已经足够好了。在 PHP 中,虽然我会应用某种模板框架(我自己通常使用Smarty)来获得一些漂亮干净的 HTML 页面,而只需最少的控制结构和变量引用。

于 2010-09-22T04:29:42.433 回答
1

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

于 2010-09-05T14:03:31.710 回答
1

我实际上正在做一个正是这样做的项目!只是用 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文件)

请记住,这并未在生产环境中进行全面测试。

于 2018-06-15T05:05:25.080 回答
0

似乎有人做到了:https ://github.com/steffans/razr

但我仍然会转换为 Twig,它更强大。

于 2014-01-19T22:27:01.943 回答