使用$ this的Codeigniter致命错误

时间:2015-02-20 08:22:20

标签: php codeigniter rss

使用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();时,我收到以下错误:

  

致命错误:在第8行的C:\ wamp \ www \ xxxx \ application \ views \ pagetop_view.php中不在对象上下文中时使用$ this

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

有人可以告诉我我做错了吗

3 个答案:

答案 0 :(得分:2)

请勿在视图中直接包含功能代码 创建辅助函数,然后在视图中使用它。例如,

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

答案 1 :(得分:1)

试试这个

$CI =& get_instance();

之后使用$ CI代替$ this。

答案 2 :(得分:1)

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

但是,您可以在视图中调用函数。这些函数必须写在帮助器中。

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

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

此外,在您的情况下,您应该能够通过将vars从控制器传递到视图来实现您的需求。

我想这里你的视图已加载到你的索引()中,你的名字被命名为#34; myview&#34;。

控制器:

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'];
}
?>