是否可以?如果是这样,怎么办?
如果不是,如果我需要在文档中编写 PHP,我是否必须放弃 pug?
环顾四周后,我没有找到任何人解决了这个问题。
您可以将 PHP 嵌入到 Pug 模板中,就像您希望通过相对不受干扰的任何文字纯文本一样[*]。有文档中涵盖的许多选项 https://pugjs.org/language/plain-text.html,但我认为这些很可能是嵌入 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,您只需在等号前面加上感叹号来防止转义:
p(class!="<?php echo $foo ?>")
。 (有趣的是,对未转义属性值的支持是专门为此用例添加 https://github.com/pugjs/pug/issues/198#issuecomment-2960113.)
当然,默认情况下 .pug 文件会编译为 .html 文件,因此如果您使用它们来生成 PHP,您将需要更改扩展名。一种简单的方法是使用gulp http://gulpjs.com/与gulp-pug https://github.com/pugjs/gulp-pug and gulp重命名 https://github.com/hparra/gulp-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 标准语法中的任何内容冲突。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)