是否可以?如果是这样,怎么办?
如果不是,如果我需要在文档中编写PHP,是否必须放弃哈巴狗?
在四处搜寻之后,我没有找到解决此问题的任何人。

最佳答案

您可以将PHP嵌入到Pug模板中,就像您要通过相对宽松的[*]传递任何文字纯文本一样。有a number of options covered in the docs,但我认为这些最有可能是嵌入PHP的最佳选择:

  • 在一个元素之后,它将正常工作。例如,p Good morning, <?php echo $user->name ?>
  • 单独一行。由于以“<?php echo $foo; ?>)都将起作用。
  • 多行PHP是一种复杂的情况。如果可以将其包装在HTML元素中,则可以使用Pug的块文本语法:在该元素之后放置一个点,然后在其下方包括缩进的纯文本。
    p.
        <?php
        if ($multiline) {
            echo 'Foo!';
        }
        ?>
    

    如果需要在元素外部使用它,则另一个选择是在每行前面加上管道作为前缀:
    |<?php
    |if ($multiline) {
    |   echo 'Foo!';
    |}
    |?>
    

    (从技术上讲,由于上面的第2点,第一行不需要加前缀,但是如果使用此方法,我还是会为保持一致性而加前缀。)
  • 要在属性中使用PHP,您只需要通过在等号前面加上一个bang来防止转义:p(class!="<?php echo $foo ?>")。 (有趣的是,对未转义属性值的支持是added specifically for this use case。)

  • 当然,默认情况下,.pug文件会编译为.html文件,因此,如果使用它们生成PHP,则需要更改扩展名。一种简单的方法是使用gulpgulp-puggulp-rename插件来处理它们,如下所示:
    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('.'));
    });
    

    我没有与Pug进行广泛的合作,所以我不知道在现实的用例中是否存在任何潜在的难题,但是最简单的示例首先可以正常工作。

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

    关于php - 是否可以在jade/pug中编写PHP?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42023440/

    10-11 03:23
    查看更多