是否可以在jade/pug中编写PHP?

stu*_*t42 6 html php pug

可能吗?如果是这样,怎么样?如果不是,如果我需要在我的文档中编写PHP,我是否必须放弃哈巴狗?在四处寻找之后,我找不到任何对此有所了解的人.

cfc*_*cfc 9

你可以在Pug模板中嵌入PHP,就像你希望通过相对不受干扰的[*]传递的任何文字纯文本一样.有许多涉及在文档的选项,但我认为这是最有可能嵌入PHP的最佳选择:

  1. 在元素之后,它将起作用.例如,p Good morning, <?php echo $user->name ?>.
  2. 单独一行.由于以"<"开头的任何行都以纯文本形式传递,因此任何一行PHP语句(例如<?php echo $foo; ?>)都可以正常工作.
  3. 多行PHP是一个有点复杂的案例.如果您可以将其包装在HTML元素中,则可以使用Pug的块文本语法:在元素后面加一个点,然后在下面包含缩进的纯文本.

    p.
        <?php
        if ($multiline) {
            echo 'Foo!';
        }
        ?>
    
    Run Code Online (Sandbox Code Playgroud)

    如果您在元素外部需要它,另一个选项是为每行添加一个管道:

    |<?php
    |if ($multiline) {
    |   echo 'Foo!';
    |}
    |?>
    
    Run Code Online (Sandbox Code Playgroud)

    (从技术上讲,由于上面的第2点,第一行不需要加上前缀,但是如果使用这种方法,我只会为了一致性而将它作为前缀.)

  4. 要在属性中使用PHP,您只需要通过在等号前面添加一个bang来阻止转义:p(class!="<?php echo $foo ?>").(有趣的是,为此用例专门添加了对未转义属性值的支持.)

当然默认情况下.pug文件被编译为.html文件,因此如果您使用它们来生成PHP,您将需要更改扩展名.一个简单的方法做,这是用来处理它们吞掉一饮而尽,哈巴狗一饮而尽,重命名的插件,这将是这个样子:

var gulp = require('gulp'),
     pug = require('gulp-pug'),
     rename = require('gulp-rename');

gulp.task('default', function () {
    return gulp.src('./*.pug')
        .pipe(pug())
        .pipe(rename({
            extname: '.php'
        }))
        .pipe(gulp.dest('.'));
});
Run Code Online (Sandbox Code Playgroud)

我没有与Pug广泛合作,所以我不知道在现实世界的用例中是否会出现任何潜在的问题,但上面的简单示例都按预期工作.

[*] Pug仍然对纯文本执行变量插值,但它使用的#{variable}格式不应与PHP的标准语法中的任何内容冲突.


gan*_*dis 1

您检查过该pug-php项目吗?我个人没有使用这个特定模块的经验,但它似乎正是您想要完成的事情:能够在 Pug 中使用 PHP。