我正在使用自定义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。*。
答案 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。不过,在这种情况下,逻辑很简单,您可以在视图中即时设置一个变量。