刀片中快速IF语句的优雅方式

时间:2016-12-25 20:40:27

标签: php laravel if-statement web blade

我是Laravel的新手,我知道我可以在这样的双花括号中回显变量:

<p>{{ $posts->id }}</p>

现在在我的情况下,我有一个表单有时包含变量$ posts(顺便说一下是表),有时根据URL中的参数不包含它来插入行。

当然,如果没有帖子,则“ - &gt; id”部分将失败。 有一种优雅的方式可以在这里制作一个快速的IF语句,例如:

<?php if ($posts) echo $posts["id"]; ?>

但只是使用刀片引擎。

我知道我可以在HTML块周围使用@if但是我必须一直两次写该块。

2 个答案:

答案 0 :(得分:4)

这取决于究竟是什么$posts

您可以使用三元语句。例如,如果$posts是集合或数组,请使用empty

{{ empty($posts) ? '' : $posts->id }}

如果它只是变量,请使用isset()

在某些情况下,可以使用or语法:

{{ $posts or 'It is empty' }}

在PHP7中,您可以使用??(空合并运算符)来检查变量isset()。例如:

{{ $posts ?? $posts->id }}

您可以在the official documentation中看到其他说明(请参阅Echoing Data If It Exists部分)。

答案 1 :(得分:1)

optional帮助程序是另一种更类似于“ laravel”的方法。

library(dplyr)

DataA <- data.frame(chr = c("chr1", "chr1", "chr1"), start = c(25,50,60), end = c(35,70,85))
DataB <- data.frame(chr = c("chr1", "chr1", "chr1"), start = c(10,55,76), end = c(15,75,82), score = c(24,14,10))

luA <-  Map(`:`, DataA$start, DataA$end)
luA <- data.frame(value = unlist(luA),
                 index = rep(seq_along(luA), lapply(luA, length)))

DataA[luA$index[match(DataB$start, luA$value)],]
DataB[luA$index[match(DataB$start, luA$value)],]

{{ optional($posts)->id }} 助手一起使用,效果很好。