调用非对象上的成员函数 getDOM()

发布于 2024-09-11 11:51:59 字数 2493 浏览 10 评论 0原文

我正在尝试创建一个 PHP 函数,将事件添加到 google 日历。它似乎正确构建了对象,但在尝试添加事件时抛出“在 FeedEntryParent.php 中的非对象上调用成员函数 getDOM()”错误。这是仅包含构造函数和添加事件的函数的缩写类:

class GCal_datasource {
    private $user = 'xxxxxxx';
    private $pass = 'xxxxxxxxx';
    private $client;
    private $gdata_cal;

    private $calendar; 
    private $visibility;

        public function __construct($settings = NULL){
        session_start();        
        require_once 'Zend/Loader.php';     
        Zend_Loader::loadClass('Zend_Gdata');
        Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
        Zend_Loader::loadClass('Zend_Gdata_HttpClient');
        Zend_Loader::loadClass('Zend_Gdata_Calendar');

        if($settings == NULL){
            $settings = array();
            $settings['calendar'] = 'default';
            $settings['visibility'] = 'full';
        }       

        $this->calendar = $settings['calendar']; 
        $this->visibility = $settings['visibility'];    
        $this->client = $this->get_ClientLoginHttpClient();
        $this->gdata_cal = new Zend_Gdata_Calendar($this->client);      
    }

    public function create_event($fields){
        $gc = $this->gdata_cal;
        $new_event = $this->gdata_cal->newEventEntry();
        echo '<pre>';
        print_r($fields);
        echo '</pre>';

        if(isset($fields['quick_add'])){ 
            $new_event->content = $gc->newContent($fields['quick_add']);
            $new_event->quickAdd = $gc->newQuickAdd(true);
        } else if (isset($fields['title']) && isset($fields['when'])) { 
            $new_event->title = $fields['title'];
            $where = $gc->newWhere($fields['where']);
            $new_event->where = array($where);
            $desc = $gc->newContent($fields['desc']);
            $new_event->content = $desc;
            $new_event->content->type = 'text';
            $new_event->when = self::build_when_array($fields['when']);
            if(isset($fields['web_content'])){
                $new_event->link = web_event_array($fields['web_content']);
            }   
        }

        echo '<pre>';
        print_r($new_event);
        echo '</pre>';

        $gc->insertEvent($new_event);
        return $created_event->id->text;
    }
}

错误(我相信)是我在代码末尾调用 insertEvent() 的方式。我认为唯一的原因是我只有在错误存在时才会收到错误,如果将其删除,上面的回显就会按预期打印出事件对象。

任何对 Goggle PHP API 有更好掌握的人可以帮助我,我将不胜感激。

I'm trying to create a PHP function that adds an event to a google Calendar. It appears to be building the object correctly but it throws a "Call to a member function getDOM() on a non-object in FeedEntryParent.php" error when trying to add the event. Here is the abbreviated class with only the constructor and the function that adds the event:

class GCal_datasource {
    private $user = 'xxxxxxx';
    private $pass = 'xxxxxxxxx';
    private $client;
    private $gdata_cal;

    private $calendar; 
    private $visibility;

        public function __construct($settings = NULL){
        session_start();        
        require_once 'Zend/Loader.php';     
        Zend_Loader::loadClass('Zend_Gdata');
        Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
        Zend_Loader::loadClass('Zend_Gdata_HttpClient');
        Zend_Loader::loadClass('Zend_Gdata_Calendar');

        if($settings == NULL){
            $settings = array();
            $settings['calendar'] = 'default';
            $settings['visibility'] = 'full';
        }       

        $this->calendar = $settings['calendar']; 
        $this->visibility = $settings['visibility'];    
        $this->client = $this->get_ClientLoginHttpClient();
        $this->gdata_cal = new Zend_Gdata_Calendar($this->client);      
    }

    public function create_event($fields){
        $gc = $this->gdata_cal;
        $new_event = $this->gdata_cal->newEventEntry();
        echo '<pre>';
        print_r($fields);
        echo '</pre>';

        if(isset($fields['quick_add'])){ 
            $new_event->content = $gc->newContent($fields['quick_add']);
            $new_event->quickAdd = $gc->newQuickAdd(true);
        } else if (isset($fields['title']) && isset($fields['when'])) { 
            $new_event->title = $fields['title'];
            $where = $gc->newWhere($fields['where']);
            $new_event->where = array($where);
            $desc = $gc->newContent($fields['desc']);
            $new_event->content = $desc;
            $new_event->content->type = 'text';
            $new_event->when = self::build_when_array($fields['when']);
            if(isset($fields['web_content'])){
                $new_event->link = web_event_array($fields['web_content']);
            }   
        }

        echo '<pre>';
        print_r($new_event);
        echo '</pre>';

        $gc->insertEvent($new_event);
        return $created_event->id->text;
    }
}

The error (I believe) is how I am calling insertEvent() towards the end of the code. The only reason I think that is I only get the error when it exists and if I remove it the echo above it prints out the Event object as intended.

Anyone with a better grasp of the Goggle PHP API that can lend me a hand I would greatly appreciate.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

遇见了你 2024-09-18 11:51:59

我遇到了这个问题。
我认为你必须将字符串更改

$new_event->title = $fields['title'];

$new_event->title = $service->newTitle($fields['title']);

I had this problem.
I think you have to change string

$new_event->title = $fields['title'];

to

$new_event->title = $service->newTitle($fields['title']);
终难遇 2024-09-18 11:51:59

在 FeedEntryParent.php 中的非对象上调用成员函数 getDOM() 意味着您在名为“FeedEntryParent.php”的文件中的某个位置调用了 getDOM()一个变量,但该变量不是对象,因此没有 getDOM() 方法。

您发布的代码中没有任何地方调用 getDOM(),因此发布的代码中不会生成错误。

追踪对 getDOM() 的调用。该错误通常会给出一个行号。查看您正在对哪个变量调用该方法。该变量不是对象。找到该变量的设置位置 - 这可能就是您的问题所在。

Call to a member function getDOM() on a non-object in FeedEntryParent.php means that somewhere in the file named "FeedEntryParent.php" you have called getDOM() on a variable and that variable is not an object and so does not have a getDOM() method.

Nowhere in the code you posted is a call to getDOM(), so the error is not generated in the posted code.

Track down that call to getDOM(). The error usually gives you a line number. See what variable you are calling the method on. That variable is not an object. Find where that variable is set - that's probably where your problem is.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文