用刀片模板检查字符串的第一个字符

时间:2014-11-22 02:41:12

标签: laravel orm blade

现在,在我的控制器中,我将一些按字母顺序排列的数据传递给我的探索视图。

public function browse()
{
    return View::make('explore')
    ->with('artists', Artist::orderBy('artist', 'ASC')->get());


}

然后在视图中,我正在使用Blade循环查看该信息。

<ul>
            @foreach($artists as $artist)
            <a href="/{{ $artist->artist }}"><li>{{ $artist->artist }}</li></a>
            @endforeach
</ul>

我想运行一个条件来检查每个艺术家的第一个字母,以便我可以在正确的起始字母下进一步分组数据。你会怎么用Blade做到的?我看到帮助器“starts_with”但我不太确定如何将其实现为条件。

1 个答案:

答案 0 :(得分:2)

这个逻辑真的属于视图/模板层以外的某个地方。 View Composer可能是一个更好的位置,或者甚至可能是一个模型方法,用于返回以开头字母分隔的数据 - 从而返回包含每个字母下的艺术家的数组的哈希值。

示例代码:

class Artist extends Eloquent
{
  public static function allByFirstCharacter()
  {
    $artists = Artist::orderBy('artist', 'ASC')->get();

    return $artists->reduce(function($sortedArtists, $artist) {
        $firstChar = $artist->artist[0];

        if (!isset($sortedArtists[$firstChar])) {
            $sortedArtists[$firstChar] = [];
        }

        $sortedArtists[$firstChar][] = $artist;

        return $sortedArtists;
    }, []);
  }
}

// Controller
$sortedArtists = Artist::allByFirstCharacter(); // Then pass it to the view

// In view

@foreach ($sortedArtists as $letter => $artists)
    <!-- Some menu item or something similar here -->
    @foreach ($artist as $artist)
        <!-- Print out details of artist -->
    @endforeach
@endforeach

请注意,此示例仅填充现有的第一个字符。如果你想要字母/数字中的所有字符,你需要预先填充哈希值,然后减少它。