如何在laravel代码中嵌入视频


how to embed video in laravel code

我正在做一个项目,我在一个数据库中存储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 !!}