在 blade-view 中添加 HTML 片段

Adding HTML snippets in the blade-view

我正在使用我的自定义 js 播放器创建 laravel 项目。它已经完成并正在运行,所以我需要在页面上显示带有歌曲的 div,但我不知道这样做的最佳做法是什么。

我尝试了什么: 我有一个歌曲模型,我在其中添加了显示歌曲的方法。

{
  static public function displaySongs()
  {
    $songs = Song::all();
    echo "<div class='ostContainer'>";
    foreach ($songs as $song) {
      $song->displayOne();
    }
    echo "<div>";
    return $songs;
  }

  public function displayOne()
  {
    $songname = substr($this->name, 0, -4);
    echo "<div class='songContainer noselect' 
            data-audio='$this->path$this->name' 
            data-songid='$this->id'
            data-songname='$songname'>$songname</div>";
  }
}

以及 blade 视图:

@extends('layout.layout')
@section('content')
    <audio id="audio"></audio>
    @include('player._playercontainer')
    <?php App\Song::displaySongs() ?>
@endsection

这完全符合预期,但我觉得这段代码是错误的。 有没有更好的方法来解决这个问题?

Laravel 版本:5.8.*.

您可以在您的视图中执行大部分操作。做类似的事情:

public function displaySongs()
{
    return view('songs')->with([
        'songs' => Song::all()
    ]);
}

那么在你看来:

@extends('layout.layout')
@section('content')
    <audio id="audio"></audio>
    @include('player._playercontainer')
    <div class='ostContainer'>
        @foreach ($songs as $song)
            @php
                $songname = substr($song->name, 0, -4);
            @endphp
            <div class='songContainer noselect' 
                data-audio='{{$song->path}}{{$song->name}}' 
                data-songid='{{$song->id}}'
                data-songname='{{$songname}}'>
                {{$songname}}
            </div>
        @endforeach
    </div>
@endsection

作为一般规则,您希望模型中的逻辑、​​瘦控制器以及视图中的所有 HTML。不过在本例中,逻辑非常简单,您只需在视图中即时设置一个变量即可。