【问题标题】:Get data generated on another controller获取在另一个控制器上生成的数据
【发布时间】:2011-06-10 03:49:20
【问题描述】:

我有一个简单的逻辑问题。我开始使用 CodeIgniter,现在我了解了 Controller 的概念。例如,视图仅用于生成内容(而不是预处理数据),控制器用于获取需要查看的所有信息。很好。

我的问题是:我有一个来自 iframe 的名为 /poll/1 的投票,我喜欢在其他时候在另一个控制器上打印它。这条路径是Poll::index(1) 的亲戚(从逻辑上讲),我在Content::index()

我在CI UserGuide 上找不到类似情况的解释。

我该怎么做?

谢谢。

编辑:我会做一个示例代码:

class Blog extends CI_Controller {
    function index(){
         // Do some prints
         // Executes Poll::index(1), but store on some string
         // Do some prints
    }
}

class Poll extends CI_Controller {
    function index($id){
         // Do some prints
    }
}

这个想法是:/poll/1 有效,/blog 也有效(但这一秒将打印更多内容,通过投票)。

【问题讨论】:

  • 能否添加一些代码结构让问题更清晰?
  • 很好。我会这样做...等一下...

标签: codeigniter controller


【解决方案1】:

嗯,有趣的是,我认为使用 ob_start() 可能对你有用,如果是我,我宁愿使用 ajax 调用来显示投票数据

这里是代码。

class Blog extends CI_Controller {
    function index(){
         // Do some prints

         // Executes Poll::index(1), but store on some string
         ob_start();
            Poll::index(1)

            // You can now use this $output value to display or store in db or store in session, 
            // but remember CI session can only hold upto certain length as it uses cookie
            $output = ob_get_contents();
        ob_end_clean();

         // Do some prints
    }
}

class Poll extends CI_Controller {
    function index($id){
         // Do some prints
    }
}

【讨论】:

  • 这是一个很好的答案,但是我不会丢失Poll 上的$this 上下文?我认为类似于$poll = new Poll(),但它在 CI 上有效?
  • 我没有检查过,但是在 CI 中是的,你很可能会丢失 $this 我猜调用 Poll::index(1) 会产生错误。我的建议不是为 Poll 创建控制器,而是创建一个 poll 库或助手,然后从其他控制器调用它。这样你就不会破坏 mvc 模式,最终会有更干净的代码库。
【解决方案2】:

我最喜欢的一种方法是将其用作超类,因此 Poll 类扩展了博客。这使您的民意调查可以利用您的博客方法。然后,您可以使用任何父方法并在您想要的任何 class#method 中加载正确的视图。

【讨论】:

  • 我做不到。我需要调用一些不同的控制器,而不仅仅是Poll。同样,我不仅会在 Blog 上使用投票信息,还会在其他控制器上使用投票信息。
猜你喜欢
  • 1970-01-01
  • 2015-06-14
  • 2017-03-02
  • 2017-02-19
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 2020-04-01
  • 2021-11-02
相关资源
最近更新 更多