如何在laravel代码中嵌入视频

时间:2013-06-06 09:01:24

标签: php mysql video embed laravel

我正在开发一个项目,在其中我将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>

7 个答案:

答案 0 :(得分:2)

幸运的是,我确实找到了解决问题的方法。希望它也应该对你有所帮助。使用嵌入语句中存在的URL。例如,如果你转到youtube并点击 this 视频的嵌入链接,你会得到这个

<iframe width="420" height="315" src="//www.youtube.com/embed/BstTBw6BLrE" frameborder="0" allowfullscreen></iframe>

现在使用src标记中的url。这适用于其他视频托管服务,如VEVO。

希望有所帮助......

答案 1 :(得分:2)

对于任何想要在Laravel中嵌入视频的人,请查看KaneCohen/embed。它与Youtube或Vimeo很有效(没有尝试其他来源),你不必乱用任何逻辑。只需安装(documentation中的安装指南)和:

new Subscriber([this](){ init(); }, false);

请勿忘记在@foreach ($videos as $video) <h4>{{ $video->title }}</h4> <div class="media"> <div class="media-body"> {!! Embed::make($video->link)->parseUrl()->getIframe() !!} </div> </div> @endforeach

中设置别名

答案 2 :(得分:1)

我遇到了同样的问题,但是控制台发现了这个错误:

  

拒绝显示&#39;网址&#39;在一个框架中因为它设置了X-Frame-Options&#39;到&#39; SAMEORIGIN&#39;。

我在这里寻找,我找到了这篇文章

Refused to display in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'

这对我有用。

你应该试试这个

@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

答案 3 :(得分:0)

在视图中使用简单的刀片标记

<强> {!! $ url !!} 这将改变观看视频

而不是

{{$ url}}这将写成一个字符串(例如输入中)

答案 4 :(得分:0)

您可以简单地使用{{}}来代替{!! !!}

例如:

{!! $video->link !!}

答案 5 :(得分:0)

laravel-embed package可以帮助您使用刀片组件嵌入YouTube视频(和其他视频):

<x-embed url="https://www.youtube.com/watch?v=oHg5SJYRHA0" />

您只需将视频的公共URL传递到url属性中,然后程序包将处理其余的内容。

此外,该软件包还支持针对所有服务(不仅是YouTube)支持的所有验证规则,而且该响应开箱即用。

答案 6 :(得分:-1)

你的'layouts.master'看起来怎么样? 浏览器中的任何html源代码? 看一下:你的'index.blade.php'应该用UTF-8编码而没有'BOM'(在编辑器中)!!

'@ layout('layouts.master')'必须是第一个(昨天在L4中我也一样)。