在刀片视图中添加HTML代码段

时间:2019-07-11 20:21:07

标签: php laravel project

我正在使用自定义js播放器创建laravel项目。它已经完成并且可以正常工作,所以我需要在页面上显示带有歌曲的div,而我不知道这样做的最佳实践。

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

{
  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>";
  }
}

刀片视图:

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

这完全可以按预期工作,但是我觉得这段代码是错误的。 有没有更好的方法可以解决这个问题?

Laravel版本:5.8。*。

1 个答案:

答案 0 :(得分:1)

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

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。不过,在这种情况下,逻辑很简单,您可以在视图中即时设置一个变量。