使用 $this 的 Codeigniter 致命错误

Codeigniter fatal error using $this

使用 Codeigniter 2.2.1

我正在尝试使用此示例解析 RSS 提要: http://hasokeric.github.io/codeigniter-rssparser/

我已经下载了库并添加到我的库文件夹中。

然后我将此代码添加到我的视图中:

function get_ars() 
{
    // Load RSS Parser
    $this->load->library('rssparser');

    // Get 6 items from arstechnica
    $rss = $this->rssparser->set_feed_url('http://feeds.arstechnica.com/arstechnica/index/')->set_cache_life(30)->getFeed(6);

    foreach ($rss as $item)
    {
        echo $item['title'];
        echo $item['description'];
    }
}

当我调用函数 get_ars(); 时,出现以下错误:

Fatal error: Using $this when not in object context in C:\wamp\www\xxxx\application\views\pagetop_view.php on line 8

我查看了 this post,但没有解决我的问题。

谁能告诉我我做错了什么

试试这个

$CI =& get_instance();

然后使用 $CI 而不是 $this.

不要直接在视图中包含函数代码。
创建一个 辅助函数 ,然后在您的视图中使用它。例如,

1) helpers/xyz_helper.php

function get_ars() 
{
    $ci =& get_instance();

    // Load RSS Parser
    $ci->load->library('rssparser');

    // Get 6 items from arstechnica
    $rss = $ci->rssparser->set_feed_url('http://feeds.arstechnica.com/arstechnica/index/')->set_cache_life(30)->getFeed(6);

    foreach ($rss as $item)
    {
        echo $item['title'];
        echo $item['description'];
    }
}


2) 在您的自动加载文件中加载助手 (config/autoload.php)

$autoload['helper'] = array('xyz_helper');


3)现在可以在视图中使用了

<?php 
$ars = get_ars(); 
foreach($ars as $a) {
?>
...
...
<?php } ?>


阅读文档:
Helper
Creating Libraries

CodeIgniter 是一个 MVC 框架。这意味着你不应该试图在你的视图中加载东西或编写函数。

但是您可以在视图中调用函数。这些功能必须写在一个助手里面。

有关详细信息,请参阅此内容:http://www.codeigniter.com/user_guide/general/helpers.html

编辑:请参阅 Parag Tyagi 对帮助解决方案的回答

另外,在你的情况下,你应该能够通过将变量从你的控制器传递到你的视图来实现你所需要的。

我假设您的视图已加载到您的 index() 中,并且您的名称为 "myview"。

控制器:

public function index()
{
    // Load RSS Parser
    $ci->load->library('rssparser');
    $data["rss"] = $ci->rssparser->set_feed_url('http://feeds.arstechnica.com/arstechnica/index/')->set_cache_life(30)->getFeed(6);

   $this->load->view("myview", $data);
}

查看:

<?php
foreach ($rss as $item)
{
    echo $item['title'];
    echo $item['description'];
}
?>