在非对象上调用成员函数getEmbedHtml()

时间:2013-04-06 10:27:31

标签: cakephp vimeo

我正在将Vimeo Player与我的cakephp应用程序集成,它给我上面的错误

 Error: Call to a member function getEmbedHtml() on a non-object
 File: C:\wamp\www\ann\app\View\Videos\index.ctp
 Line: 1 

这是我的第1行

  <?php echo $vimeo->getEmbedHtml('https://www.vimeo.com/44633289', array()); ?>

此链接正常https://www.vimeo.com/44633289

以下是Vimeohelper.php文件

<?php 
class VimeoHelper extends AppHelper 
{ 
    /** 
     * Creates Vimeo Embed Code from a given Vimeo Video. 
     * 
     *    @param String $vimeo_id URL or ID of Video on Vimeo.com 
     *    @param Array $usr_options VimeoHelper Options Array (see below) 
     *    @return String HTML output. 
    */ 
    function getEmbedCode($vimeo_id, $usr_options = array()) 
    { 
        // Default options. 
        $options = array 
        ( 
            'width' => 400, 
            'height' => 225, 
            'show_title' => 1, 
            'show_byline' => 1, 
            'show_portrait' => 0, 
            'color' => '00adef', 
        ); 
        $options = array_merge($options, $usr_options); 

        // Extract Vimeo.id from URL. 
        if (substr($vimeo_id, 0, 21) == 'http://www.vimeo.com/') { 
            $vimeo_id = substr($vimeo_id, 21); 
        } 

        $output = array(); 
        $output[] = sprintf('<object width="%s" height="%s">', $options['width'], $options['height']); 
        $output[] = ' <param name="allowfullscreen" value="true" />'; 
        $output[] =    ' <param name="allowscriptaccess" value="always" />'; 
        $output[] =    sprintf(' <param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=%s&server=www.vimeo.com&show_title=%s&show_byline=%s&show_portrait=%s&color=%s&fullscreen=1" />', $vimeo_id, $options['show_title'], $options['show_byline'], $options['show_portrait'], $options['color']);
        $output[] = sprintf(' <embed src="http://www.vimeo.com/moogaloop.swf?clip_id=%s&server=www.vimeo.com&show_title=%s&show_byline=%s&show_portrait=%s&color=%s&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="%s" height="%s"></embed>', $vimeo_id, $options['show_title'], $options['show_byline'], $options['show_portrait'], $options['color'], $options['width'], $options['height']);
        $output[] = '</object>'; 

        return $this->output(implode($output, "\n")); 
    } 
} 
?>

2 个答案:

答案 0 :(得分:1)

错误告诉您需要知道的一切。 您没有正确访问帮助程序。

a)您需要将其包含在控制器public $helpers

b)您需要使用$this-Vimeo和正确的方法名称正确调用它(您不能只创建自己的名称,因为该方法需要存在!):

<?php echo $this-Vimeo->getEmbedCode(...); ?>

$vimeo->的代码段对于完全过时的cake1.2(不适用于cake1.3或cake2.x)是正确的。

答案 1 :(得分:0)

您能否提供有关如何初始化$ vimeo的更多信息?

很可能$ vimeo初始化不正确,并且在此处访问时设置为null。 希望这有助于您的调试。

看起来VimeoHelper中的getEmbedCode函数就是你想要使用的而不是getEmbedHtml。

考虑将功能定义更改为

static function getEmbedCode($vimeo_id, $usr_options = array())

然后您可以通过调用以下方式获取嵌入式URL:

VimeoHelper::getEmbedCode('https://www.vimeo.com/44633289', array())