【发布时间】:2019-07-12 04:35:03
【问题描述】:
我正在使用我的自定义 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.*.
【问题讨论】:
-
使用
blade语法。代替<?php ?>,使用{{ }},或者,因为返回是html,所以使用{!! !!}。通常你不会直接在视图中查询东西,但我认为使用这样的静态方法是可以的。或者等等;保持这个想法。在您的displaySongs()和displayOne()中,您必须将 html 附加到一个字符串,然后返回该字符串以使{!! App\Song::displaySongs() !!}工作。 -
更好的做法是使用刀片,请查看此链接:laravel.com/docs/5.8/blade,
-
@TimLewis 我知道这种语法,但我不想打扰它,因为它在那里并没有真正改进。我很可能会使用符号链接建议的内容。
-
是的;这还算公平。在某些情况下,您希望在模型中包含代码(主要是为了可重用性),但这也可以通过
blade组件(@include("component")等)来完成。许多不同的方法;选择适合你的,也选择适合你使用的框架的。干杯! -
@TimLewis 我在另一个视图中使用这种方法,我的代码现在到处都是,因为我是创建网络应用程序和 laravel 的新手,谢谢。