我正在做一个项目,我在一个数据库中存储youtube视频链接,然后我检索这些链接,并使用刀片模板引擎,我试图将它们嵌入到页面。我使用循环将视频放到页面中。由于某些原因,我在浏览器里看不到任何视频。它覆盖了提到的空间,但没有渲染任何东西。我用的是laravel 3。下面是一些代码片段,如果它们有帮助的话。
这是index.blade.php
@layout('layouts.master')
@section('content')
@foreach ($videos as $video)
<h4>{{ $video->title }}</h4>
<br>
<div class="media">
<div class="media-body">
<iframe width="560" height="315" src="{{ $video->link }}" frameborder="0" allowfullscreen>
</iframe>
</div>
</div>
<br>
@endforeach
@endsection
$videos变量是从控制器传入的
class Videos_Controller extends Base_Controller
{
public $restful = true;
public function get_index()
{
$videos = DB::table('videos')->get();
return View::make('videos.index')
->with('title', 'Videos')
->with('videos', $videos);
}
}
所有我得到的是一个空白页。我不明白我做错了什么。我使用twitter bootstrap进行css原型设计。如有任何帮助,不胜感激。
master.blade.php的'head'是这样的:
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ $title }} </title>
<meta name="viewport" content="width=device-width">
{{ HTML::style('css/bootstrap.min.css') }}
{{ HTML::style('css/bootstrap-responsive.min.css') }}
</head>
这是我在firefox中检查元素时的显示
<div class="media">
<div class="media-body">
<iframe width="560" height="315" frameborder="0" allowfullscreen="" src="http://www.youtube.com/watch?v=1iBm60uJXvs">
#document
<html>
<head></head>
<body></body>
</html>
</iframe>
</div>
</div>
幸运的是,我确实设法找到了解决问题的方法。希望它也能对你有所帮助。使用嵌入语句中存在的url。例如,如果你去youtube点击这个视频的嵌入链接你会看到这个
<iframe width="420" height="315" src="//www.youtube.com/embed/BstTBw6BLrE" frameborder="0" allowfullscreen></iframe>
现在使用SRC标签中的url。这也适用于其他视频托管服务,比如VEVO。
对于其他想在Laravel中嵌入视频的人,请查看KaneCohen/Embed。它与Youtube或Vimeo(没有尝试过其他来源)一起工作得很好,你不必打乱任何逻辑。只需安装(安装指南在文档中)和:
@foreach ($videos as $video)
<h4>{{ $video->title }}</h4>
<div class="media">
<div class="media-body">
{!! Embed::make($video->link)->parseUrl()->getIframe() !!}
</div>
</div>
@endforeach
别忘了在你的config/app.php
我也有同样的问题,但是控制台捕获了这个错误:
拒绝在帧中显示"URL",因为它将"X-Frame-Options"设置为"SAMEORIGIN"。
我在这里找它,我发现了这篇文章
拒绝在框架中显示,因为它设置了'X-Frame-Options'& # 39; SAMEORIGIN& # 39;
,这对我来说是可行的。
你应该试试这个
@layout('layouts.master')
@section('content')
@foreach ($videos as $video)
<h4>{{ $video->title }}</h4>
<br>
<div class="media">
<div class="media-body">
<iframe width="560" height="315" src={{ $video->link + "&output=embed" }} frameborder="0" allowfullscreen>
</iframe>
</div>
</div>
<br>
@endforeach
@endsection
在视图中使用一个简单的刀片标签
{! !$ url ! !}这将渲染视频
不是{{$url}} THIS将写入字符串(例如在输入中)
laravel-embed包可以帮助您使用刀片组件嵌入YouTube视频(和其他):
<x-embed url="https://www.youtube.com/watch?v=oHg5SJYRHA0" />
您只需将视频的公共URL传递给URL属性,包将处理其余的内容。
此外,包支持的所有服务(不仅仅是YouTube)都有验证规则,并且它是开箱即用的响应
你的布局如何?主人长什么样?您的浏览器中有HTML源代码吗?看一下:你的'index.blade.php'应该用UTF-8编码,没有'BOM'(在你的编辑器中)!!
'@layout('layout .master')'必须是第一个
您可以简单地使用{{}}而不是使用{!!!!}
例如:
{!! $video->link !!}